Java中的流分为字节流和字符流,下面分别介绍这两种IO流的概念和它们的区别。

Java中字节流和字符流

字节流

在计算机中,1个字节等于8位二进制,字节流操做的是二进制文件,所有的文件都是用二进制来表示的,所以,Java中字节流可以操作所有类型的文件,它包括:

  • 音频
  • 视频
  • 图片
  • 文本

根据字节的输入方向可以分为字节输入流和字节输出流。

Java中字节流和字符流

  • 字节输入流InputStream: 磁盘到内存为输入;
  • 字节输出流OutputStream:内存到磁盘为输出。

在Java中为了更快的拷贝文件,有一个字节缓存流。同样的也分为字节缓冲输入流和字节缓冲输出流,它可以使得数据的读取效率更高。

Java中字节缓冲输入流和字节缓冲输出流new方法

//字节缓冲输入流
BufferedInpuStream bis=new BufferedInputStream(new FileInputStream("文件地址"));
//字节缓冲输出流
BufferedOutpuStream bis=new BufferedOutputStream(new FileOutputStream("文件地址"));

Java中字节输入流和字节输出流new方法

FileOutputStream fileOutputStream =new FileOutputStream("文件地址");
FileInputStream  fileInputStream =new FileInputStream("文件地址");

字节输入流例子

//读取单个字节的方法
FileInputStream fi =new FileInputStream("文件地址");
int a;
while((a=fi.read())!=-1){
	System.out.println((char)a);
}
fi.close();
//读取多个字节的方法
FileInputStream fi =new FileInputStream("文件地址");
byte [] bytes=new byte[1024];
int len;
while((a=fi.read(bytes))!=-1){
	String str=new String(bytes);
	System.out.println(str);
}
fi.close(); 

字节输出流例子

FileOutputStream out = new FileOutputStream("file.txt", true);
String str = "some words";
out.write(str.getBytes());
out.close(); 

字符流

在Java中字符流只能操作文本文件,例如java文件txt文件等,字符流默认会用到缓冲区,字符流也可以解决文本文件中文乱码的问题。

根据字符的输入方向可以分为字符输入流和字符输出流。

Java中字节流和字符流

字符输入流Reader: 磁盘到内存为输入;
字符输出流Writer:内存到磁盘为输出。

例子

//字符输入流,读文件
FileReader reader = new FileReader("in.txt");
int len = 0;
while((len = reader.read())!=-1){
	System.out.print((char)len);
}
reader.close();
//字符输出流,写文件
FileWriter writerer = new FileWriter("out.txt");
writerer.write("some words\n");
writerer.close();

带有缓冲区的字符输入流和输出流例子

BufferedReader reader = new BufferedReader(new FileReader("in.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("out.txt"));
String str = null;

while((str=reader.readLine())!=null){
	writer.write(str);
	writer.newLine();//换行
}
reader.close();
writer.close();

字节流和字符流区别

主要区别是操作的对象不同,字节流操作的是二进制文件,字符流操作的文本文件。

  • 操作对象不同:字节流操作的是二进制文件,字符流操作的文本文件。
  • 缓冲区不同: 字符流默认用到缓冲区
  • 字符编码不同:字符流可以处理一些中文乱码问题。