25.Java IO: InputStreamReader && OutputStreamWriter
来源:互联网 发布:java 垃圾回收面试 编辑:程序博客网 时间:2024/03/29 02:52
本文是在Java IO: InputStreamReader和Java IO: OutputStreamWriter翻译而来。
Java IO: InputStreamReader
Java InputStreamReader类(java.io.InputStreamReader)是用于包裹InputStream,因此将基于字节的输入流转换成基于字符的Reader。
Java InputStreamReader经常用来从文件(或者网络连接)读取字符,这些文件是字节表示的文本。例如,一个文本文件是UTF-8编码的字符。为了读取这样的文件,你可以用InputStreamReader来包裹FileInputStream。
InputStreamReader例子
下面是Java InputStreamReader的例子:
InputStream inputStream = new FileInputStream("c:\\data\\input.txt");Reader inputStreamReader = new InputStreamReader(inputStream);int data = inputStreamReader.read();while(data != -1){ char theChar = (char) data; data = inputStreamReader.read();}inputStreamReader.close();
例子首先创建了FileInputStream,然后将它包裹成InputStreamReader。第二步,例子通过InputStreamReader从文件中读取所有的字符。
read()
InputStreamReader的read()方法返回一个int值,这个值包含了已读字符的字符值。例如:
int data = inputStreamReader.read();
你可以将返回的int值转型为char,像这样:
char aChar = (char) data;
Stream的末尾
如果read()方法返回-1,表明已到达Stream的末尾,InputStreamReader里没有更多的可读数据。-1是int值,不是字节-1.在这里是不一样的。
使用read()方法和InputStream中的read()方法一样。当到达流的末尾,可以将它关闭。
字符编码构造器
Java InputStreamReader有一系列可选择的构造器,允许你指定字符格式(ISO-Latin1,UTF-8,UTF-16等等)用于以底层InputStream解释字节。
下面是Java InputStreamReader例子,指定字符编码格式到构造器:
InputStream inputStream = new FileInputStream("c:\\data\\input.txt");Reader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
注意InputStreamReader构造器的第二个参数。InputStreamReader现在将用UTF-8编码格式从底层InoutStream解释字节。这样InputStream将一个接一个地解码UTF-8编码的字符,以char值返回每个字符(在已返回的int值里)。
关闭InputStreamReader
当你结束从InputStreamReader读取字符时,你应该记得关闭它。关闭InputStreamReader同时也将关闭InputStreamReader读取字符时使用的InputStream实例。
调用InputStreamReader的close()方法 就可以关闭它。例如:
inputStreamReader.close();
在java7里你也可以使用try-with-resources 。例如:
InputStream input = new FileInputStream("data/text.txt");try(InputStreamReader inputStreamReader = new InputStreamReader(input)){ int data = inputStreamReader.read(); while(data != -) { System.out.print((char) data)); data = inputStreamReader.read(); }}
注意这里不再有任何调用close()方法。try-with-resources 将考虑到这些。
注意FileInputStream实例也没在try-with-resources块里创建。这意味着try-with-resources块不会自动关闭这俩个FileInputStream实例。然而,当InputStreamReader关闭了,它也将关闭它读取的InputStream,所以当InputStreamReader关闭后,这个FileInputStream实例也将关闭。
Java IO: OutputStreamWriter
Java OutputStreamWriter类(java.io.OutputStreamWriter)是用于包裹OutputStream,因此将基于字节的输出流转换成基于字符的Writer。
当你需要向文件写入用例如UTF-8或UTF-16格式编码的字符时,Java OutputStreamWriter是很有用的,你可以向OutputStreamWriter写入字符(char值),然后将正确地编码它们,将编码的自己写入底层OutputStream.
OutputStreamWriter例子
下面是Java OutputStreamWriter的例子:
Here is a simple Java OutputStreamWriterexample:OutputStream outputStream = new FileOutputStream("c:\\data\\output.txt");Writer outputStreamWriter = new OutputStreamWriter(outputStream);outputStreamWriter.write("Hello World");outputStreamWriter.close();
字符编码构造器
Java OutputStreamWriter有一系列可选择的构造器,允许你指定字符格式(ISO-Latin1,UTF-8,UTF-16等等)用于以底层OutputStream解释字节。下面是Java OutputStreamWriter例子,指定字符编码格式到构造器:
OutputStream outputStream = new FileOutputStream("c:\\data\\output.txt");Writer outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");
例子首先创建了outputStream,然后将所有已读字符转换成UTF-8格式字符(每个字符是一个或更多字节),然后将UTF-8编码的字节吸入底层OutputStream。
关闭OutputStreamWriter
当你结束向OutputStreamWriter写入字符时,你应该记得关闭它。关闭OutputStreamWriter同时也将关闭OutputStreamWriter读取字符时使用的OutputStream实例。
调用OutputStreamWriter的close()方法 就可以关闭它。例如:
outputStreamWriter.close();
在java7里你也可以使用try-with-resources 。例如:
OutputStream output = new FileOutputStream("data/data.bin");try(OutputStreamWriter outputStreamWriter = new OutputStreamWriter(output)){ Person person = new Person(); person.name = "Jakob Jenkov"; person.age = 40; outputStreamWriter.writeObject(person);}
注意这里不再有任何调用close()方法。try-with-resources 将考虑到这些。
注意FileOutputStream实例也没在try-with-resources块里创建。这意味着try-with-resources块不会自动关闭这俩个FileOutputStream实例。然而,当OutputStreamWriter关闭了,它也将关闭它读取的OutputStream,所以当OutputStreamWriter关闭后,这个FileOutputStream实例也将关闭。
- 25.Java IO: InputStreamReader && OutputStreamWriter
- Java IO - InputStreamReader&OutputStreamWriter
- Java IO InputStreamReader和OutputStreamWriter
- Java - IO - 转换流 - InputStreamReader - OutputStreamWriter
- Java IO(十三):InputStreamReader 和 OutputStreamWriter
- Java-IO之InputStreamReader和OutputStreamWriter
- 5 Java IO:InputStreamReader 和 OutputStreamWriter
- Java InputStreamReader和OutputStreamWriter
- Java InputStreamReader 和 OutputStreamWriter
- JAVA中常用IO流类:InputStreamReader和OutputStreamWriter
- java学习笔记:关于IO转换流InputStreamReader和OutputStreamWriter
- java IO操作:转换流--OutputStreamWriter类与InputStreamReader类
- Java IO--字节-字符流转换OutputStreamWriter/InputStreamReader
- 【JAVA IO流之转换流OutputStreamWriter和InputStreamReader】
- Java IO流->处理流->转换流:InputStreamReader&OutputStreamWriter
- java io系列21之 InputStreamReader和OutputStreamWriter
- java io系列21之 InputStreamReader和OutputStreamWriter
- Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
- 宾夕法尼亚州推动比特币合法化遭遇…
- 深入理解虚拟机--内存部分
- MongoDB - 简介和快速搭建
- 比特币是一种比美国运通公司更为可…
- 连线:2016年比特币将迎来重大发展
- 25.Java IO: InputStreamReader && OutputStreamWriter
- 要怎么开发莱特币
- 谁会开发莱特币
- 开发一款莱特币
- 怎么开发一款莱特币
- 怎样开发一款莱特币
- Array系列之from(),of()
- 莱特币钱包怎么开发
- 莱特币研发与运营