Java中的流分为字节流和字符流,下面分别介绍这两种IO流的概念和它们的区别。
字节流
在计算机中,1个字节等于8位二进制,字节流操做的是二进制文件,所有的文件都是用二进制来表示的,所以,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文件等,字符流默认会用到缓冲区,字符流也可以解决文本文件中文乱码的问题。
根据字符的输入方向可以分为字符输入流和字符输出流。
字符输入流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();
字节流和字符流区别
主要区别是操作的对象不同,字节流操作的是二进制文件,字符流操作的文本文件。
- 操作对象不同:字节流操作的是二进制文件,字符流操作的文本文件。
- 缓冲区不同: 字符流默认用到缓冲区
- 字符编码不同:字符流可以处理一些中文乱码问题。