文章转载自http://wentao365.iteye.com/blog/1374731
字节流和字符流区别?
种类 | 基本单位 | 处理类型 | 使用缓冲区 | 输入类 | 输出类 |
---|---|---|---|---|---|
字节流 | 字节(8bit) | 所有类型 | 未使用 | InputStream | OutputStream |
字符流 | 字符(16bit) | 文本类型 | 使用(buffer) | Reader | Writer |
方法一:字节流
import java.io.*;
public class StreamTest1 {
public static void main(String[] args) {
File file = new File("G:\\github\\TestJava\\data3.txt");
try {
InputStream fileInputStream = null;
fileInputStream = new FileInputStream(file);
int i = 0;
while ((i = fileInputStream.read()) != -1) {
System.out.print((char) i + "");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
编程思路:
FileInputStream.read()返回当前字节文件对应的整数,或者文件读取到末尾返回-1
本地文件:用editPlus编辑文本文件如下,并保存为utf-8
结果:
缺点:不能处理中文,每个字节都需要读写硬盘
方法二:字符流
package demo;
import java.io.*;
class StreamTest{
public static void main (String[] args)throws IOException{
FileInputStream inputStream = new FileInputStream(new File("G:\\github\\TestJava\\data.txt"));
InputStreamReader inputStreamReader=new InputStreamReader(inputStream,"GBK");
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
String line;
StringBuilder sb=new StringBuilder();
while((line=bufferedReader.readLine())!=null){
sb.append(line);
}
System.out.println(sb);
}
}
编程思路:主要三个方法
FileInputStream() 从本地文件新建输入流
InputStreamReader() 将输入流读取成字符流
BufferedReader() 加缓存,append()追加字符串
本地文件:在G:\github\TestJava下新建data.txt,并保存如下内容(默认编码方式GBK,也可以save as 为 utf-8):
结果:
优点:使用缓存,可以处理中文
缺点:没有实现换行
方法三:用commons-io-*.jar
import java.lang.*;
import org.apache.commons.io.FileUtils;
import java.io.*;
class StreamTest{
public static void main(String[] args)throws IOException {
File file = new File("G:\\github\\TestJava\\data.txt");
String str=FileUtils.readFileToString(file,"GBK");
System.out.println(str);
}
}
结果:
结论:还是高科技好用。
网友评论