第一章节我们讨论了,字符串文本操作是很常见的需求jdk帮我们封装好了一些操作字符流的reader和writer。普通的FileReader和FileWriter都是默认平台的编码方式。 当我们想用特殊的编码格式的writer和reader就需要使用今天所讲的转换流OutputStreamWriter和InputstreamReader。
InputStreamReader和OutputStreamWriter
思考:我们键盘录入都是字节流录入的,一次读一个肯定太麻烦了。我们知道有字符流BufferReader有一个readLine方法,如果一次读一行的话是不是就轻松很多了。 但是! 字节流没有这个方法 我们想通过 BufferedReader,来装饰InputStream,很明显是不行的。
这时候就jdk为我们提供了
InputStreamReader,字节流通向字符流的桥梁。其实字符流的底层就是InputStreamReader。
public class TransStreamDemo {
public static void main(String[] args) throws IOException {
InputStream in = System.in;
OutputStream out = System.out;
/*
* 将字节转字符的桥梁,读就是把看不懂的变成看的懂的。 解码
* 这样,我们操作起来就方便一点
*/
InputStreamReader isr = new InputStreamReader(in);
/*
* 将字符转向字节的桥梁,写就是把看的懂的变成看不懂的。 编码
* 这样,我们存起来方便一点,因为文件都是存放二进制,就省去了wirte("Tig".getBytes());
*/
OutputStreamWriter osw = new OutputStreamWriter(out);
//字符流
BufferedReader burf = new BufferedReader(isr);
BufferedWriter bufw = new BufferedWriter(osw);
String line = null;
while ( (line = burf.readLine()) != null) {
if ("exit".equals(line)) {
break;
}
bufw.write(line.toUpperCase());
bufw.newLine();
bufw.flush();
}
}
}
指定编码格式
指定编码格式操作就很简单的,直接早构造器中加入编码格式就可以了。网上很多人提到的说io出现乱码,基本用转换流都能解决
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("gbk_3.txt"), "GBK");
InputStreamReader isr = new InputStreamReader(new FileInputStream("gbk_3.txt"), "GBK");
剩下的操作就大同小异了