IO输入输出流

IO流

IO输入输出流

什么是iO?

IO是对内存的读和写

输入和输出都是相对内存为参照

1 以流的方向分类

往内存中去,叫做输入,或者叫读

从内存中出来,叫做输出,或者叫写

2 读取数据方式不同

字节流

读取1个byte 等同于8个二进制位 可读取任何类型,音乐,图片

字符流

读取纯文本文件

四大顶流都是直接继承Object

InputStream(字节流)

Outputstream(字节流)

Reader(字符流)

writer(字符流)

养成好习惯,流用完一定要关闭,不然会耗费很多资源

close()和flush()

close()方法四大顶流都有

所有的输出流都是可刷新的,有flush()方法,将未输出的数据强行输出完

文件专属

FileInputStream(字节流)

int read( ) 一次读取一个字节,内存和硬盘交互频繁

返回字节值

●int read( byte[] b)一次读取b.length个字节,提高执行效率

返回字节数量

IO输入输出流

byte []bytes = new byte[4];
int len =0;
while ((len=fis.read(bytes))!=-1){     System.out.print(new String(bytes,0,len));
}//一次读取byte数组长度个值

FileOutputstream(字节流)

int res =0;
byte []bytes =new byte[3];
while ((res=fis.read(bytes))!=-1){    fos.write(bytes,0, res);}
//一次写出byte数组个值
文件复制

IO输入输出流

拷贝的时候文件类型不限,都能拷贝

fis = new FileInputStream("src/com/IO/myfile");
fos = new FileOutputStream("src/com/IO/myfile_out");
int res =0;
byte []bytes =new byte[3];
while ((res=fis.read(bytes))!=-1){    fos.write(bytes,0, res);}

FileReader(字符流)

●擅长读取普通文本文件

fr = new FileReader("src/com/IO/myfile");
char []chars = new char[1024];
int res = 0;
while ((res=fr.read(chars))!=-1){   System.out.println(new String(chars,0,res));}

Filewriter(字符流)

●擅长输出普通文本文档

注意:不追加append为true,会清空文件内容再写入

fw = new FileWriter("src/com/IO/myfile",true);
//在源文件内容后继续输出
char []chars {'我','是','中','国','人'};
fw.write(chars);

转换流(字节–>字符)

io.InputStreamReader

当需要传入reader类型,但实际有Inputstream可通过转换流转换

BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream("src/com/IO/myfile")));

io.OutputStreamWriter

当需要传入Writer类型,但实际有Outputstream可通过转换流转换

BufferedWriter bw = new BufferedWriter(new InputStreamWriter(new FileOutputStream("src/com/IO/myfile")));

缓冲流专属

io.BuffereReader

不需要自己定义byte/char数组

new需要传入reader,但reader为抽象类,可传入子类FileReader

●readLine( ) 方法

读取一行数据,不读取换行符

FileReader read  =newFileReader("src/com/IO/myfile");
//节点流 
BufferedReader bf = new BufferedReader(read);//包装流  
String line = null;
while ((line = bf.readLine())!=null){     System.out.println(line); }

io.BuffereWriter

同上

io.BuffereInputStream

同上

io.BuffereOutputStream

同上

数据流专属

io.DataInputStream

了解

io.DataOutputStream

了解

标准输出流

io.PrintWriter

io.PrintStream

对象专属流

io.ObjectInputStream

将指定文件所存的类的实例化对象信息读入内存

 ObjectInputStream ois = new ObjectInputStream(new  FileInputStream("students"));  
 Object obj = ois.readObject();    System.out.println(obj);   
 ois.close();

io.ObjectOutputStream

当我们需要实现信息的持久化保存,可将一个类的实例化对象信息写出指定文件中

注意:自定义的类序列需要此类实现Serializable接口,此接口只是标识,不包含任何方法

当系列化后每个类都会生成唯一的编号serialVersionUID

Student student1 = new Student("zs", 18);  
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("students"));       out.writeObject(student1);
out.flush();    
out.close();   
}}class Student implements Serializable
上一篇:Linux中的存储设备管理(设备识别,挂载,分区,磁盘配额)


下一篇:目标检测中常用关键词的含义