IO流的总结

流是java世界中对外在事物流动规律的一个描述,那么必然和数据相关联。

字符流:Reader Writer

字节流:OutputStream InputStrean

Reader的基本方法

int read():返回一个int型数据。为什么要返回一个int型数据呢,因为&0xff 所以要返回一个int型数据,和以后的-1编码相区别

int read(buf):把读取到的字符存储在一个临时缓冲区中,返回读取的个数。所以呢我们要定义两个变量,一个是len 一个是buf 

比如这样 :

import java.io.*;
class IOTest
{
		public static void main(String[] args)throws IOException
		{
				FileReader fr=new FileReader("abc.txt");
				int ch=fr.read();
				System.out.println(ch);
				int len=0;
				char[]buf=new char[1024];
				len=fr.read(buf);
				System.out.println(new String(buf,0,len));
				
		}
}

  

我觉得java本身对读取这个动作,有个角标的动作,(我抓取了一大票的数据比如1024个字符(2k),然后有一个计算器,一个数组的索引),一个count--,一个Index++,一个数据要来检测什么时候要给数组read,一个用来获取数据

当然系统的笼统的理解就是源(InputStream Reader)对自己干过什么事情是有记忆的。它能做的只有读了,所以它呢 有个记忆功能。这样我们就可以合理的避开底层的实现。

Writer的基本方法

void Write(int c)把指定字符写入到流中  注意的是目的地--流(缓冲区) 因为我们要有一个动作,就是对应编码表(查表)所以我们要存到缓冲区 所以要把数据存到你想去的地方的时候,我们就要flush().

void Write(char[] buf) 把对应的字符数组 写入到流中

void Write(String str)把对应的字符串写入到流中

InputStream  同上类似只不过char变成了byte

OutputSream  也是类似 只不过没有写入字符串的方法  如果你想把“串串香’‘写到目的地(不用写入(缓冲区,流)因为不要查表 )记得getBytes

如何确定应该什么时候用什么流呢?首先我们要明确源和目的

1.源

首先源:Input Reader

其次是不是纯文本文件? yes Reader

读取的设备是哪个?内存,硬盘还是键盘

2.目的

目的:OutputStream Writer

其次是不是纯文本文件?

写入的设备是哪个?内存 硬盘 还是控制台

若果是键盘和控制台的话就要涉及 转换流 InputStreamReader  OutputStreamWriter

那么我接下来就介绍几个常用的流对象

  FileReader InputStreamReader(转换流 涉及指定编码集 一定要用到) FileInputStream   System.in

包装 BufferReader  BufferedInputStream

FileWriter OutputStreamWriter  FileOutStream System.out

包装:BufferedWriter  BufferedOutputStream

  

 

posted on 2016-01-05 07:38  piano1900  阅读(119)  评论(0)    收藏  举报

导航