JAVA中的流分为输入流和输出流。其实还有打印流
输入流又分字节输入流和字符输入流(InputStream和Reader);
输出流又分字节输出流和字符输出流(OutputStream和Writer)。
网上找了张流接口的图
输入流:
字节输入流:
InputStream
:是所有的输入字节流的父类,它是一个抽象类。
FileInputStream:主要用来操作文件输入流。
read():从流中读取1个字节的数据,返回结果是一个int
BufferedInputStream:字节缓冲流,提高效率。通常传入一个字节输入流实例化该对象再进行read操作
字符输入流:
Reader:是字符输入流的抽象基类
FileReader :文件字符输入流。
BufferedReader:缓冲流,可以把字符输入流进行封装,将数据进行缓冲,提高读取效率
InputStreamReader :特殊输入流,转换流,用于字节输入流到字符输入流的转换(解决编码问题)。实例如下:
public static void main(String[] args) throws IOException {
//创建字节输入流
InputStream inputStream=new FileInputStream("D:\\字节缓冲输出流.txt");
//创建输入转换流
InputStreamReader inputStreamReader=new InputStreamReader(inputStream,"utf-8");
inputStreamReader.read();
int num=0;
while ((num=inputStreamReader.read())!=-1){
System.out.print((char)num);
}
inputStreamReader.close();
}
输出流:
字节输出流:
OutputStream:是字节输出流的基类
FileOutputStream:是用于写文件的输出流
BufferedOutputStream :像上面那个BufferedInputStream一样,都可以提高效率。实例如下:
public static void main(String[] args) throws IOException {
OutputStream outputStream=new FileOutputStream("D:\\字节缓冲输出流.txt");
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream);
bufferedOutputStream.write("缓冲流写入数据".getBytes());
bufferedOutputStream.flush();//如果流只使用一次,此操作可以省略。close方法也会把数据刷新到文件里
bufferedOutputStream.close();
}
字符输出流:
Writer:是字符输出流的抽象基类,
FileWriter:文件输出流
BufferedWriter:缓冲流,可以把字符输出流进行封装,将数据进行缓冲,提高读取效率,示例如下:
InputStream inputStream=new FileInputStream("D:\\字节缓冲输出流.txt");
BufferedInputStream bufferedInputStream=new BufferedInputStream(inputStream);
int num=0;
while ((num=bufferedInputStream.read())!=-1){
System.out.print(num);
}
bufferedInputStream.close();
OutputStreamWriter:特殊输入流,转换流,用于字节输出流到字符输出流的转换(解决编码问题)。示例如下:
//创建字节输出流
OutputStream outputStream=new FileOutputStream("D:\\字节缓冲输出流.txt");
//创建转换流
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream,"utf-8");
outputStreamWriter.write("字节输出流转换为字符输出流");
outputStreamWriter.flush();
outputStreamWriter.close();
来源:CSDN
作者:WannaRunning
链接:https://blog.csdn.net/qq_29569183/article/details/103482299