IO流的使用(二)

最近一直在看java的IO流机制,但是还没能深入到可以去理解他们源码的能力,只能把自己所学习到的摘记下来,后面在逐渐补充吧。

1.缓冲流

BufferedReader(字符输入流缓冲区)
BufferedWriter(字符输出流缓冲区)
我们经常不小心对输入流和输出流搞反了,教大家一个方法,凡事有read()方法的就是从别人那拿东西过来(比如从网上、磁盘的文件上)。凡事有write()方法的就是把自己的东西送给别人(比如写文件到磁盘)
—缓冲流的作用
提高对数据的读写效率。还有只要使用了缓冲区,就要记得每次读完刷新数据-flash()。其实关闭了缓冲区,就是关闭了缓冲区的流对象。
BufferedWriter有个newLine()方法,写入一个行分隔符,就是换行符。
BUfferedReader有个readLine()方法,就是读取一行文本,不包含任何行终止符。

* 自己实现readLine()方法

public String myReaderLine() throws IOException{
        StringBuilder sb = new StringBuilder();     
        int ch = 0;
        while(-1!=(ch=r.read())){
            if(ch=='\r')
                continue;
            if(ch=='\n')
                return sb.toString();
            else 
                sb.append((char)ch);    
        }
        if(sb.length()!=0)
            return sb.toString();
        return null;
    }

其实BufferedReader中的readLine()方法:
遇到 \r 继续往下读
遇到\n 返回所读到的数据
如果整个读完了,且不满一行就返回整个数据

2.字节流

怎么说呢?按照我的理解,字节流比字符流大,字节流什么都可以读,而字符流只能读字符数据。听毕老师一句话:凡事输出的都是写,凡事输入的都是读。out–write input–read
InputStream类有个方法available()返回输入流的大小,在new数组存储数据的时候,就可以避免内存溢出了。
exmple:我们经常从网上下载一张图片到本地磁盘上。
拿到的是输入流InputStream,然后就开始read()方法读取,在来一个输出流OutputStream,开始write()写到本地文件中。
但是如果我们确定下载一个txt文件的话,我们就可以将输入流InputStream包装成字符输入流缓冲区,这样可以提高效率。
BufferedReader br = new BufferedReader(new InputStreamReader(inputstream));

3.转化流

转化流是用来干什么的?字节流有时需要转换为字符流,这个转化流就是桥梁。然后通常涉及到字符编码转化时,需要用到转化流。
还有字符流是不能转换为字节流的,这也是为什么我说字节流大的原因。
// 键盘录入最常见写法
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 控制台输出最常见的写法
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream( System.out)));

4.流操作的基本规律

毕老师流操作的基本规律:
最痛苦的就是流对象有很多,却不知道要用哪个。
1.明确源和目的
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
2.操作的数据是否是纯文本
是:字符流
否:字节流
3.当体系明确后,在明确要使用哪个具体的对象。通过设备来进行区分。
源设备:内存、硬盘、键盘
目的设备:内存、硬盘、控制台

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值