Java中I/O流总结

Java中只有两种类型的流:字节流和字符流
1.字符流,主要是指处理的时候是以字符为单位,一般是用来处理TXT文本文档的读写。特点:处理更方便。
2.字节流,除了字符流,其他的都是以字节流的形式出现。处理所有的二进制文件。特点:使用更广泛。

另外,为了把流的概念彻底搞清楚,首先要了解以下几个概念。
1.输入流输出流:一切以“内存”为中心,所有往内存输入的流,我们管它叫“输入流”;所有从内存往“外部”(节点)输出的流,我们管它叫“输出流”。
2.节点流:外部的种类非常多,包括文件、缓冲区、管道、字节数组、打印机等,外部设备统称为节点。因此相对应的输入输出流就有FileInputStream/FileOutputStream、BufferedInputStram/BufferedOutputStram…依次对应。即每种外设理论上对应一种节点流。如果类型为是“字节流”,那么一般会以InputStream/OutputStream结尾;如果是“字符流”,那么一般会以Reader/Writer结尾。
3.处理流:为了隐藏各个不同的节点流的差异,对外提供更加方便的输入输出方法。即通过包装节点流,形成新的流,使这种新的流会更加通用,处理起来更加方便,所以叫做处理流。这里用了典型的“适配器模式”。
4.转换流:为了能够在字节流和字符流之间进行转换,于是有了转换流的概念。实际上,只有字节流转换为字符流。因为一旦是字符流了,已经是处理更方便的流了,为什么要转换为处理不那么方便的流呢,因此Java中只提供了字节流往字符流进行转换的API(InputStreamReader、OutputStreamReader)

读举例:
Read

FileInputStream fs=new FileInputStream(file);
byte []bs=new byte[1024];//定义一个类似水桶的,用来盛放读到内存中的流。
Int hasReadLength=0;
While((hasReadLength=fs.read(bs))>0)
{
//处理bs
}

fs.close()//记得要关闭流,有始有终。

边读边写举例:

DataOutputStream dos = new DataOutputStream( conn.getOutputStream());//对根据url建立的连接流进行封装
                StringBuffer sb = new StringBuffer();           
                sb.append(PREFIX);
                dos.write(sb.toString().getBytes());
                InputStream is = new FileInputStream(file);//建立文件输入流
                byte[] bytes = new byte[1024];//建立缓冲区(相当于“打水桶”)
                int len = 0;
                while((len=is.read(bytes))!=-1)//从输入流is读入到字节数组bytes中,然后从字节数组中写到输出流dos中
                {
                    dos.write(bytes, 0, len);//每次读多少,写多少
                }
                is.close();
                dos.write(LINE_END.getBytes());

文件分批次读写举例:
fileInputStream 可以分多次读,每次从Index=0开始读,但会用一点,少一点。
具体例子见下一篇博客《局域网内替换用户下载的apk》

总结

1.根据实际情况(字符流or字节流,读or写),建立相应的流(Reader/Writer or InputStream/outputStream)
2.建立缓冲区,一般建立一个1K大小的字节数组作为读写的内存缓冲区
3.用“多次打水”的方式,形式为
inputStream.read(bytes) ;
outputStream.write(bytes);

//*作者:守静居士
//*转载请注明出处:
http://blog.csdn.net/csp277/article/details/45841549
//*时间:20150520

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值