java字节流与字符流

来源:互联网 发布:js toggle botton 编辑:程序博客网 时间:2024/06/06 12:56
 

流是一个有序的字节或字符序列,可作为一个输入源,也可作为一个输出的目的地。

 
字节流以字节为单位输入输出,字节流类名含有stream;

 

字符流以字符为单位输入输出,字符流类名含有reader或writer.

 

为了通用性,java中字符是16位的unicode字符,所以8位的字节流必须和16位的字符流进行转换。

 

字节流到字符流的转换使用InputStreamReader类:


public InputStreamReader(InputStream in);
public InputStreamReader(InputStream in,String encoding);

 

字符流到字节流的转换使用OuputStreamWriter类:

 
public OuputStreamWriter(OnputStream in);
public OnputStreamWriter(OnputStream in,String encoding);

 


Reader和Writer类允许用户在程序中无缝的支持国际字符集,如果要读取的文件是别国语言,要使用字符流。

JavaI/O字节流与字符流就是java实现输入/输出数据。

 

字节流是一个字节一个字节的输入/输出数据 (两个字节组成一个汉字)所以在用字节流读一串汉字时会出现乱码问题,可采用字符流进行读取。

 


同样字符流是一个字符一个字符的输入/输出数据(一个字符=两个字节)所以用字符流读一串汉字可以解决乱码问题,同时它也兼顾了英文,这是由unicode的编码规则决定的,因为中文的unicode字符有特殊标识。

 

 

 读取: BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(File file), "UTF-8"));

 

写入: BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(File file), "UTF-8"));

 

不包BufferedWriter和BufferedReader一层,也可以达到解决中文乱码问题的目的.

 

参考下面J2SE6中关于 InputStreamReader 和 OutputStreamWriter 的解析

*************************************************************

public class InputStreamReader extends Reader

  InputStreamReader 是字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

  每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

  为了达到最高效率,可考虑在BufferedReader内包装InputStreamReader。例如:

  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

*******************************************************************

public class OutputStreamWriter extends Writer

  OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

  每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给write() 方法的字符没有缓冲。

  为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。例如:

  Writer out = new BufferedWriter(new OutputStreamWriter(System.out)); 

原创粉丝点击