IO(书写器/阅读器)

意义:简单的说就是这里都是面向字符的接口,其他Stream都是面向字节的接口。以前用的都是用ASCII吧字节转换为相应的字符表示在计算机上,但是现在出现了更多种编码方式如utf-8,utf-16等。为了不让字节在不同计算机上显示一样的内容,java有了书写器/阅读器,而它们处理字符而不是字节,在流链上,他应该在靠近用户的一层,甚至在最顶层,可以在IO(过滤器流)中看到例图。

基本API:java.io.Reader   java.io.Writer同基本流一样,他们集体的子类向特定目标或源读或者写如数据。

书写器:Writer

他是一个抽象类,不能直接使用。

常用方法:Writer(),write(char[] text,int offset, int length), write(int c), write(char[] test), flush(),close(), write(String s),write(String s,int offset, int length)

基本方法(子类至少要覆盖的方放):write(char[] text,int offset, int length),flush(), close()

例如:

public class WriterTest {
	 public static void main(String[] args){


		 char[] testChar = {'y', 'u', 'e'};
		 Writer writer;
		try {
			writer = new OutputStreamWriter(
						 new FileOutputStream(new File("save.txt")), "UTF-8");
			try {
				writer.write(testChar, 0, testChar.length);
			} catch (IOException e) {
				 TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
}
}

OutputStreamWriter是具体的Writer:根据编码方式把字符转换为字节并写入底层流,构造函数有底层流和编码的字符串:OutputStreamWriter(OutputStream out,String encoding)

close()方法会刷新书写器,然后关闭底层输入流,并释放所有资源。

阅读器:Reader

同Writer一样,它是一个抽象类,具体的工作得有它的子类来完成。

常用方法:Reader(), read(char[] text, int offset, int length), read(), read(char[] text), ready(), close().

read(char[] text, int offset, int length)最为常用。

read方法把将一个Unicode字符作为int返回,流结束返回-1,这相当于就是Unicode字符,只不过需要把int转换为char类型。

ready()返回boolean类型,指示当前阅读器是否可以无阻赛的读取。

InputStreamReader是具体的子类,和OutputStreamReader相反,它的作用是把底层流送过类的字节转换成字符,并返回相应的字符数。编发方式在构造函数中指定,要么默认要么显示指定。

简单的例子:

public class ReaderTest {
public static void main(String[] args) throws IOException{
	Reader reader;
	
	InputStream in;
	try {
		in = new FileInputStream("save.txt");
		reader = new InputStreamReader(in,"UTF-8");
		int i;
		while( (i=reader.read())!=-1){
			System.out.print((char)i);
		}
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
}
}

过滤器阅读器/书写器:

分别对应于BufferedInputStream/BufferedOutputStream,书写器和阅读器也有相应的缓冲BufferedReader/BufferedWriter,作用和BufferedInputStream/BufferedOutputStream是一样的。

实例:
public class BufferedReaderTest {
	public static void main(String[] args) throws IOException{

		Reader reader;
		StringBuffer sb = new StringBuffer();
		InputStream in;
		try {
			in = new FileInputStream("save.txt");
			reader = new BufferedReader(new InputStreamReader(in,"UTF-8"),1024);
			
			int i;
			while( (i=reader.read())!=-1){
				sb.append((char)i);
			}
			//reader.close();
			//in.close();
			System.out.print(sb.toString());
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

PrintWriter:略。

dfs 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值