标签:
不管是磁盘还是网络传输,最小的存储单元都是字节,而不是字符,所以 I/O 操作的都是字节而不是字符,但是为啥有操作字符的 I/O 接口呢?这是因为我们的程序中通常操作的数据都是以字符形式,有时我们必须把来自于"字节"层次结构中的类和“字符”层次结构中的类结合起来使用,为了实现这个目的,要用到"适配器"类:InputStreamReader可以把InputStream转化为Reader,而OutputStreamWriter可以把OutputStream转化为Writer。接着上一篇文章,本篇文章讲述同步并阻塞式线程的第二类,基于字符的Writer和Reader。
Writer相关类层次结构:
Reader相关类层次结构:
具体代码示例如下:
package io; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.CharArrayReader; import java.io.CharArrayWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringReader; import java.io.StringWriter; public class ReaderandWriter { public static void main(String[] args) { /** * FileWriter与FileReader */ try { FileWriter fw = new FileWriter("file.txt"); String str = "大家好!"; fw.write(str); fw.close(); FileReader fr = new FileReader("file.txt"); int ch = 0; while((ch = fr.read()) != -1){ System.out.print((char)ch); } fr.close(); } catch (IOException e) { e.printStackTrace(); } /** * BufferedWriter与BufferedReader */ try { BufferedWriter bw = new BufferedWriter( new FileWriter("file.txt")); String str = "你好!"; bw.write(str); bw.close(); BufferedReader br = new BufferedReader(new FileReader("file.txt")); System.out.println(br.readLine()); br.close(); } catch (IOException e) { e.printStackTrace(); } /** * StringWriter与StringReader */ try{ String str = "今天很美好,明天很美好,后天还是很美好..."; StringReader sr = new StringReader(str); String strRead = null; char[] size = new char[1024]; while((sr.read(size)) != -1){ strRead = new String(size); } sr.close(); StringWriter sw = new StringWriter(); sw.write(strRead); sw.close(); System.out.println(sw.toString()); }catch(Exception e){ e.printStackTrace(); } /** * PrintWriter */ try { PrintWriter pw = new PrintWriter(new FileWriter("file.txt")); pw.append("你们好!"); pw.close(); BufferedReader br = new BufferedReader(new FileReader("file.txt")); System.out.println(br.readLine()); br.close(); } catch (IOException e) { e.printStackTrace(); } /** * CahrArrayWriter与CharArrayReader */ try { CharArrayWriter caw = new CharArrayWriter(); String str = "我们都有一个家!"; caw.write(str); caw.close(); System.out.println(caw.toString()); char[] chars = {'A','B','C','D','E'}; CharArrayReader car = new CharArrayReader(chars); int len = 0; while((len = car.read()) != -1){ System.out.print((char)len); } car.close(); } catch (IOException e) { e.printStackTrace(); } } }图片来自:http://www.ibm.com/developerworks/cn/java/j-lo-javaio/
版权声明:本文为博主原创文章,未经博主允许不得转载。
同步阻塞式I/O(二)——基于字符的Writer、Reader
标签:
原文地址:http://blog.csdn.net/u013799929/article/details/47101251