字节流与字符流主要的区别是他们的的处理方式
1.Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
2.Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new
3、字节流处理所有的对象,字符流处理文本
4、字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作
文件,如果强制输出缓冲区内容,使用flush方法。
这里再加个在使用FileReader时碰到的乱码问题:
在FileReader读取文件的过程中,FileReader继承了InputStreamReader,但并没有实现父类中带字符集参数的构造函数,所
以FileReader只能按系统默认的字符集来解码。用InputStreamReader代替FileReader,InputStreamReader isr=new
InputStreamReader(new FileInputStream(fileName),"UTF-8");这样读取文件就会直接用UTF-8解码,不用再做编码转换。
- public static List<String> getLines( String fileName )
- {
- List<String> lines = new ArrayList<String>();
- try
- {
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8"));
- String line = null;
- while( ( line = br.readLine() ) != null )
- lines.add(line);
- br.close();
- }
- catch( FileNotFoundException e )
- {
- }
- catch( IOException e )
- {
- }
- return lines;
- }