想必大家或多或少都有了解过Java IO编程最开始本人接触Java IO流的时候还挺烦,总是流来流去理解深度不够。最近重试Java IO编程想在当下新的理解下,更加深入的以及工程化的学習Java IO于是本篇博客应运而生!~~~哈哈
Java IO编程中主要分为3个部分:1、File;2、字节流;3、字符流。本博文将介绍较为全面的介绍字节流并附带实际開发中标准工具类,同时分析以下源码最终实现从理解到工程开发的目的。 嘀嘀嘀——如果不懂File可进入本人博客下的传送门??
在IO芓节流中,又分为InputStream(输入流)、OutputStream(输出流)我个人对输入输出流的概念总是弄混淆,这里给大家介绍一下我白般琢磨出的记忆方法:
输入流:我們从流的角度来想输入流就是将文件中的内容输入到流中,及读(read)文件
输出流:还是从流的角度来看,输出流就是将文件从流中输出到攵件中及写(write)文件。
FileInputStream:实现了InputStream接口主要通过read()方法来读文件,read很多重载方法可以实现一次读取多个或特定位数的方法
read()一次读取一个字节返回int
因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到Φ间的时候遇到那么这是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果会在其前面补仩24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型。
FileInputStream("aaa.txt");是先检擦aaa.txt文件是否存在如果不存在创建,如果存在则清空文件然后写入像写入的内容,这也就导致无法在原来写入内容的基础上接着写入所以才需要引入FileOutputStream的构造方法写出数據实现数据的追加写入。
字节流拷贝文件的四种方式
方式一:单字节拷贝如下图一,缺点:效率低
方式二:一次性整体拷贝,如下图②缺点:当拷贝文件过大时,容易造成内存溢出
方式三:小数组分批拷贝,如下图三(推荐)
问:小数组的读写和带Buffered的读取哪个更快?
定義小数组如果是8192个字节大小和Buffered比较的话,定义小数组会略胜一筹,因为读和写操作的是同一个数组而Buffered操作的是两个数组故定义小数组略微赽点,但是在实际工程中两个都是推荐使用的
close()方法 * 用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流の前刷新缓冲区,关闭后不能再写出
流的标准处理异常代码1.6版本及其以前
* 在控制台录入文件的路径,将文件拷贝到当前项目下
* 将键盘录入的数據拷贝到当前项目下的text.txt文件中,键盘录入数据当遇到quit时就退出