码迷,mamicode.com
首页 > 其他好文 > 详细

同步阻塞式I/O(二)——基于字符的Writer、Reader

时间:2015-07-28 16:04:07      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

不管是磁盘还是网络传输,最小的存储单元都是字节,而不是字符,所以 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!