io流笔记

2023-09-14 10:55:04

字节输出流

1.创建字节输出流对象   FileOutputStream 变量名  = new FileOutputStream(name:);

    ①参数是字符串表示的路径或者是file对象都是可以的

    ②如果文件不存在会创造一个新的文件,但是要保证父级路径是存在的。

    ③如果文件已经存在,则会清空文件

2.写数据      write(int b)  一次写一个字节 /  (byte []b)一次写一个字节数组  /   (byte []b,int f,int l)    一次写一个字节数组中的部分字节

     ①write方法的参数是整数,但是实际上写到本地文件夹里的是整数在ASCII上对应的字符

     ②如果要输出一串字符串,那么就可以使用getBytes,例如:byte []byes = str.getBytes();此时就是吧str字符串转成了字节数组

     ③要是想换行写入

     ④如果想要续写的话,则在加一个参数true,例如:FileOutputStream(路径,true);

3.释放资源

     ①每次使用完之后都要释放资源

字节输入流

FileInputStream();

①不存在就报错

read();     返回值为int类型

①都到末尾,返回值为-1

②第一次调用read,读到的是第一个字节,第二次就是第二个字节,以此类推

③read读取文件的方式是通过指针,每调用一次read,就相当于移动一次指针;

循环读取:

while(int b = fis.read()!=-1){
      System.out.println((char)b);
}

close();

拷贝(小文件,一个一个字节拷贝的)

1.创建对象

2.边读边写

3.关闭(先开的后关)

(大文件,通过字节数组进行批量拷贝)

//若此时的txt里面的数据为  abcde

FileInputStream fis = new FileInputStream("文件名");
FileOutputStream fos = new FileOutputStream("文件名");

/*
byte []a = new byte[2];
int len = fis.read(a);//每次读取的时候是用覆盖
System.out,println(len);//输出2,如果第三次读取的话,len就是只输出1,第四次读取len就为-1

*/


byte []bytes = new byte[2];
while((int len = fis.read(bytes) != -1){

      fos.write(bytes);
}

fos.close();
fis.close();

计算机的存储规则

GBK(ANSI)(遇到中文读取俩个字节)

汉字存储:

①汉字俩个字节存储

②高位字节二进制一定以1开头,转成十进制之后就是一个负数

Unicode(遇到中文读取三个字节)

乱码

1.读取数据时未读完整个汉字

2.编码和解码的方式不统一

字符流

FileReader

1.创建字符流输入对象

2.读取数据

read();

空参:

①默认也是一个字节一个字节进行读取,如果遇到中文就会一次读取多个字节

②在读取之后,底层还是将其转成十进制,最后把十进制作为返回

read(char[])

3.释放资源

FileWriter

------------------------------------------------------------------------------------------------------------------

字节缓冲流

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件名"));

BufferedOutPutStream bos = new BufferedOutputStream(new FileOutputStream("文件名"));

使用时会把自动将基本流关闭,只需关闭缓冲流

字符缓冲流

字符缓冲输入流

pubilic String readLine();     读取一行数据,如果没有数据可读了,会返回null(不会将换行符读到)

public void newLine();          跨平台的换行

字符缓冲输出流

public String writeLine();

public void newLine();

-------------------------------------------------------------------------------------------------

转换流

字符流和字节流之间的桥梁

FileReader()

FileReader fr = new FileReader("文件路径",Charset.forName("字符编码"));

FileWriter fw = nwe FileWriter("文件路径",Charset.forName("字符编码"));

以上都是在jdk11之后的版本

将本地的GBK文件转化为UTF-8

FileReader fr = new FileReader("",Charset.forName("GBK"));
FileWriter fw = nwe FileWriter("",Charset.forName("UFT-8"));

int b;
While(b = fr.read() != -1){
     fw.write(b);
 }
fw.close();
fr.close();

利用字节流读取文件中的数据,每次读一整行,而且不能出现乱码

字节流读取中文的时候,是会出现乱码的,但是字符流可以解决

字节流里面是没有读一整行的方法的,只有字符缓冲流才能搞定

--------------------------------------------------------------------------------------------------------------------

序列化流

ObjectOutputStream();

ObjectInputStream();

把一个对象写到本地文件中

例如:

//创建对象
Student stu  = new Student("姓名","年龄");

//创建序列化流的对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("文件路径"));

//写出数据
oos.writeObject(stu);

//释放资源
oos.close();

Serializable接口里面是没有抽象方法,标记型接口

一旦实现了这个接口,那么就表示当前的Student类可以被序列化

简单来说就是:有了这个接口就可以被序列化,没有就不行

左边是正常存入数据,右边是序列化流存入

更多推荐

CSS 之 grid 网格布局

一、简介​display:grid;用于设置元素内部的布局类型为网格布局,其外显类型为块级元素。该类型的元素将内部分为行和列,划分成一个个单元格,并通过一系列相关属性控制单元格及其内容的布局和大小。​该属性值的主要应用场景为:多行多列元素排列布局。采用grid布局的元素,被称为“容器”(container),其内部的直

Maven 使用

一、初始Maven(了解)1、项目遇到的问题构建:编译代码,运行测试,打包,部署应用,运行服务器等;依赖:项目依赖大量的第三方包,第三方包又依赖另外的包,对依赖包的管理非常麻烦。2、Maven定义和作用Maven翻译为“知识的积累”,“专家”,“行家”,是一个跨平台的项目管理工具;Maven主要用作基于Java平台的项

用于图像分类的预训练模型(PyTorch实现)

用于图像分类的预训练模型(PyTorch实现)在本文中,我们将介绍一些使用TorchVision模块中存在的预训练网络的实践示例——用于图像分类的预训练模型。1.基于预训练模型进行图像分类预训练模型是在ImageNet等大型基准数据集上训练的神经网络模型。深度学习社区从这些开源模型中受益匪浅。此外,预训练模型是计算机视

EPC与5GC/5GS互联互通

一、5GS与EPC/E-UTRAN互通的非漫游架构1.N26接口是MME和5GSAMF之间的CN间接口,以实现EPC和NG核心之间的互通。网络中支持N26接口是可选的,用于互通。N26支持在S10上支持的功能的子集(对于互通是必要的)。2.PGW-C+SMF和UPF+PGW-U专用于5GS和EPC之间的互通,这是可选的

人工智能术语翻译(五)

文章目录摘要QRST摘要人工智能术语翻译第五部分,包括Q、R、S、T开头的词汇!Q英文术语中文翻译常用缩写备注QFunctionQ函数Q-LearningQ学习Q-NetworkQ网络QuadraticLossFunction平方损失函数QuadraticProgramming二次规划QuadraturePair象限对

Anaconda下Jupyter Notebook执行OpenCV中cv2.imshow()报错(错误码为1272)网上解法汇总记录和最终处理方式

零、我设备的相关信息Python3.8.8Anaconda32021.05查询匹配python3.8.*的OpenCV匹配版本为:4.1.*—4.2.*,我最后安装4.2.0.32版本如下我记录了“从发现问题,到不断试错,最后解决问题”的完整过程,以备自己复盘使用,大家不愿费时的可直接查看总结版的处理方式记录一、问题起

【CNN-FPGA开源项目解析】02--floatAdd16模块

文章目录前言浮点数加法的思路floatAdd16完整代码floatMult16代码逐步解析指数化为一致底数相加,处理进位溢出结果标准化和舍位整合为最后的16位浮点数结果[sign,exponent,fraction]其他变量宽度表特殊情况处理always敏感列表前言​上一篇文章(floatMult16模块解析)内,已经

深度剖析Linux信号机制

文章目录信号的概念信号的分类信号的产生方式从键盘获取通过系统调用硬件异常软件条件如何处理信号的到来信号的更深入剖析信号的处理动作是何时进行的?当有一大批同种信号到来时会怎样?Linux也提供了一批信号相关的系统调用信号的概念Linux中的信号是进程异步通信的一种方式。当某个信号发送到一个进程上,那么该进程就会分析该信号

java学习--day5 (java中的方法、break/continue关键字)

文章目录day4作业今天的内容1.方法【重点】1.1为什么要有方法1.2其实已经见过方法1.3定义方法的语法格式1.3.1无参无返回值的方法1.3.2有参无返回值的方法1.3.3无参有返回值的方法1.3.4有参有返回值的方法2.break和continue关键字2.1break;2.2continue;3.案例关于方法

7、DVWA——SQL盲注

文章目录一、概述二、low2.1通关思路(布尔盲注)(1)判断是否存在SQL注入漏洞(2)判断属于数字型注入还是字符型注入(3)判断结果集中的字段数(4)猜数据库名长度(5)猜数据库名(6)猜表的个数(7)猜第一个表名(8)猜user表中的字段个数、每个字段的长度、名称(9)猜字段内容2.2通关思路(时间盲注)(1)判

ASCII码对照表(十进制、八进制、十六进制、二进制的字符对照表)

ASCII(AmericanStandardCodeforInformationInterchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC646。ASCII第一次以规范标准的类型发表是在1967年,最后一次

热文推荐