java IO流笔记

IO流

流包括字符流,字节流。字符流包括Reader,Writer。

字节流包括InputStream,OutputStream



字符流。因为文件编码的不同,而有了对字符进行高效操作的字符流对象
原理:基于字节流读取字节时,去查了指定的码表


字节流和字符流的区别
字节流读取的时候,读到一个字节就返回一个字节。字符流使用了字节流读到一个或多个
字节(中文对应的字节数是两个,UTF-8码表是3个字节)时,先去查指定的
编码表,将查到的字符返回


字节流可以处理所有类型数据,如图片,mp3.而字符流只能处理字符数据


处理纯文本数据,优先考虑使用字符流


 类Reader-InputStreamReader-FileReader
 类Writer-OutputStreamWriter-FileWriter
 

 Reader常见方法 read(),read(char[]),

close()读取字符用的是window系统功能,使用完毕要进行资源的释放

 
 Writer常见方法:writer(ch)将一个字符写到流中,writer(char[]),writer(String)
 flush()刷新流:将流中的数据刷新到目的地中,流还存在 close()
 

 FileWriter该类没有特有的方法只有自己的构造函数。

特点: 用于处理文本文件,该类中有默认的编码表。该类中有临时缓冲

 可能抛出IOException或其子类
 
 指定绝对路径两种方式
 new FileWriter("c:\\demo.txt");
 new FileWriter("c:/demo.txt");
 
 	public static void main(String[] args)  {
		FileReader reader=null;
		try{
		reader=new FileReader("c:/demo.txt");
		char [] buffer=new char[1024];
		int len=0;
		while((len=reader.read(buffer))!=-1){
			System.out.println(new String(buffer,0,len));
		}
		}catch(IOException ex){
			ex.printStackTrace();
		}finally{
			try {
				reader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	


字符流的缓冲区

缓冲区的出现提高了对流的操作效率

原理:就是将数组进行封装
对应的对象:BufferedWriter :newLine()换行符
BufferedReader:readLine()一次读一行
缓冲的存在是为了增强流的功能而存在
缓冲内部就是在使用流对象的方法,只不过加入了数组对数据进行临时存储
目的在于提高操作数据的效率
	public static void main(String[] args) throws IOException  {
		BufferedWriter bw=new BufferedWriter(new FileWriter("c:/demo.txt"));
		bw.write("hello world");//将数据写入缓冲区
		bw.flush();//刷新数据流,写入目的地
		bw.close();//释放
	}

	public static void main(String[] args) throws IOException  {
	BufferedReader br=new BufferedReader(new FileReader("c:/demo.txt"));
	String line=null;
	while((line=br.readLine())!=null){
		System.out.println(line);
	}
	br.close();
	}




 readLine()原理
 用的还是与缓冲区关联的流对象的read方法。在每读到一个字符的时候,先不

 进行具体操作,先进行临时存储。在回车标记时,将临时容器中存储的数据一次性返回。

自定义一个缓存读取

 import java.io.IOException;
import java.io.Reader;
public class MyBufferedReader {
	private Reader r;
	public MyBufferedReader(Reader r) {
		this.r = r;
	}
	public String myReadLine() throws IOException {
		StringBuilder sb = new StringBuilder();
		int ch = 0;
		while ((ch = r.read()) != -1) {
			if (ch == '\r')
				continue;
			if (ch == '\n')
				return sb.toString();
			else
				sb.append((char) ch);
		}
		if (sb.length() != 0) {
			return sb.toString();
		}
		return null;
	}
	public void myClose() throws IOException {
		r.close();
	}
}


public class Test {


	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException  {


		Reader r=new FileReader("c:/demo.txt");
		MyBufferedReader br=new MyBufferedReader(r);
		String line=null;
		while((line=br.myReadLine())!=null){
			System.out.println(line);
		}
		br.myClose();
	}
}



字节流
抽象基类:InputStream,OutputStream
字节流可以操作任何数据
字节流的read方法读取一个字节
InputStreamReader字节到字符
OutputStreamWriter字符到字节
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值