Java 流(Stream)、文件(File)和IO

流 的三种分类:

 a.流向:输入流,输出流

b.数据单位:字节流。字符流

c.流的角色:字节流,处理流

字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据

涉及IO的程序每次开始之前明白几点:

更全的参考看这里:https://blog.csdn.net/qq_44543508/article/details/102831084

(1)明确要操作的数据是数据源还是数据目的(也就是要读还是要写)
(2)明确要操作的设备上的数据是字节还是文本
(3)明确数据所在的具体设备
(4)明确是否需要额外功能(比如是否需要转换流、高效流等)

Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。

一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。

但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。

 

BufferInputStream和BufferOutputStream的特点:

缓冲字节输入输出流,缓冲流是处理流,它不直接连接数据源/目的地,而是以一个字节流为参数,在节点流的基础上提供一些简单操作。

先说不带缓冲流的工作原理吧,它读取到一个字节/字符,就向用户指定的路径写出去,读一个写一个,所以就慢了,带缓冲流的工作原理,读取到一个字节/字符,先不输出,等凑足了缓冲的最大容量后一次写出去,从而提高了工作效率。

优点:减少对硬盘的读取次数,降低对硬盘的损耗。

1.BufferedOutputStreamimport

java.io.BufferedOutputStream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
Java.io.BufferOutputStream extend outPutstream
BufferedOutputStream 字节缓冲输出流

使用步骤:
1.创建一个FileOutPut Stream对象构造方法中绑定要输出的目的地
2.创建Buffer OUtputStream 对象 构造方法中传递FileOutputStream对象 提高FileOutPutStream的效率
3.使用OutPut Stream对象方法中的write 把数据写入导内部缓冲区中
4.使用Buffer OutputStream 对象的方法flush 把内部缓冲区的是护具涮新到文件中
5.释放资源(会先用flush方法刷新数据 第四步可以省略)

*/
public class BufferStream {
public static void main(String[] args) throws IOException {
//1.创建一个FileOutPut Stream对象构造方法中绑定要输出的目的地
FileOutputStream fos = new FileOutputStream("D:\\JavaPriactice\\src\\PracticeFilesObjective\\LucyproStream.txt");
//2.创建Buffer OUtputStream 对象 构造方法中传递FileOutputStream对象 提高FileOutPutStream的效率
BufferedOutputStream bos = new BufferedOutputStream(fos);
//3.使用OutPut Stream对象方法中的write 吧数据写入导内部缓冲区中
bos.write("I had put the data in buffer".getBytes());
//4.使用Buffer OutputStream 对象的方法flush 把内部缓冲区的是护具涮新到文件中
bos.flush();
}
}

2.BufferedInputStream
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*

使用步骤:
1.创建FileInputStream对象,构造方法中绑定要读取的数据源
2.创建BufferInput Stream对像 构造方法中传递FileinputStream 对象 提高FileInputStream的读取效率
3.使用Buffer Input Stream对象的方法read 读取文件
4.释放资源
*/
public class BefferStreadReader {
public static void main(String[] args) throws IOException {
//1.创建FileInputStream对象,构造方法中绑定要读取的数据源
FileInputStream fis = new FileInputStream("D:\\JavaPriactice\\src\\PracticeFilesObjective\\LucyproStream.txt");
//2.创建BufferInput Stream对像 构造方法中传递FileinputStream 对象 提高FileInputStream的读取效率
BufferedInputStream bis = new BufferedInputStream(fis);
//3.使用Buffer Input Stream对象的方法read 读取文件
/*int len =0;
while( (len =bis.read())!= -1){
System.out.println(len);
}*/
//int read(byte[]b) 从输入流中读取一定数量的 字符,并将其存储在缓冲区数组b中
byte[] bytes = new byte[1024];//存储每次读取到数据
int len =0;//记录每次读取的有效字节个数
while ((len = bis.read(bytes))!=-1){
System.out.println(new String(bytes,0,len));//abc
}
//4.释放资源
bis.close();


}
}


非文本文件的操作:
文本文件的操作:


标准的输入,输出流
System.in
System.out



posted @ 2020-07-31 16:49  tzmok  阅读(179)  评论(0编辑  收藏  举报