javaIO——字节-字符转换流

OutputStreamWriter和InputStreamReader

在整个IO包中,实际上就分为字节流和字符流,但是除了这两个流之外,还存在一组字节流-字符流的转换类。

  • OutputStreamWriter:Writer的子类,将输出的字符流转换成字节流,即:将一个字符流的输出对象转换成字节流的输出对象。
  • InputStreamReader:Reader的子类,将输入的字节流转换为字符流,即:将一个字节流的输入对象转换为字符流的输入对象。

转换步骤:

如果以文件操作为例,在内存中的字符数据需要通过OutputStreamWriter变为字节流才能保存到文件中,读取的时候需要将读入的字节流通过InputStreamReader变为字符流。

javaIO——字节-字符转换流_第1张图片

在OutputStreamWriter中需要一个字节流的对象:OutputStreamWriter(OutputStream out)  

在InputStreamReader中需要一个字节流的对象:InputStreamReader(InputStream in) 

public class OutputStreamWriterDemo {
public static void main(String[] args) throws IOException {
File f = new File("f:" + File.separator + "test.txt");
Writer out = null;//字符输出流
out = new OutputStreamWriter(new FileOutputStream(f));//字符流转换成字节流
out.write("hello world!!!");
out.close();
}

}

读的时候,也可以使用字符流的形式读取字节流文件。

public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {
File f = new File("f:" + File.separator + "test.txt");
Reader input = null; //字符输入流
input = new InputStreamReader(new FileInputStream(f));//将字节流转换成字符流
char[] c = new char[1024];
int len = input.read(c);
input.close();
System.out.println(new String(c,0,len));
}

}

但是,以上是以文件操作为例,因为OutputStreamWriter接受的类型是OutputStream,只要是字节输出流都可以使用字符的形式操作,而InputStreamReader接受的类型是InputStream,只要是字节输入流都可以使用字符的输入流操作。

虽然以字符的输出流操作了字节的输出流,但是还是字节输出,而字符的输入流,虽然以字符操作,但实际上还是使用的字节流,也就是说,传输或从文件中读取数据的时候,文件中真正保存的是字节。

总结:

操作的终端实际上都是以字节的形式进行的。









你可能感兴趣的:(Java)