JAVA输入输出(IO)之字节流
来源:互联网 发布:淘宝卖家刷200单多少钱 编辑:程序博客网 时间:2024/05/16 10:48
在之前的博客中,当介绍某个类的时候,我会将类的构造方法以及方法摘要通过表格展示出来,这些内容在JDKAPI上面都可以找到,所以从这一篇博客开始,这些方法将不再全部列出,会从中抽取一部分常用的方法。
言归正传,在上一篇博客《JAVA输入输出(IO)之文件》中介绍了File类的简单使用,如果我们要对文件进行读取、写入,仅有一个File是远远不够的,这一篇为大家介绍字节流的概念,通过本片博客,我们可以实现文件读取、写入、复制等。当然了输入输出流不仅仅可以用在文件的读写上面,还可以用于网络通信、进程通信等。
字节输入流
java.io.InputStream类是表示字节输入流的所有类的超类,字节输入流都直接或间接的继承了该类,通常情况下我们会使用该类的子孙类操作字节输入流,实现对字节输入流的读取。
在该类中,我们最常用的方法有如下几个:
对于很多初学者而言,有时候比较纠结的是什么时候用输入流,什么时候用输出流。其实这个是很简单的,我们只需要搞清楚数据的流向就可以了,如果数据是流向内存的,就是输入流,由内存流出的就是输出流。
由于输入流的实现类也很多,这里使用文件输入流(java.io.FileInputStream)作为例子为大家介绍,其他的输入流基本上是大同小异,可以自己尝试着使用。需要注意的是,不管是输入流还是输出流,在使用完毕后要调用相应的关闭方法释放流资源,且关闭资源时遵循先开后闭的原则。
直接上例子:
import java.io.FileInputStream;import java.io.IOException;public class FileReadWrite{ public static void main(String[] args) { FileInputStream stream = null; try { // 选用指定文件路径的构造方法 //test.txt文件内容为:111111111112121112211212 stream = new FileInputStream("test.txt"); int data = -1; // 从此输入流中读取一个数据字节,如果已到达文件末尾,则返回 -1 while ((data = stream.read()) != -1) { // 准备的文件为文本文件,且内容为阿拉伯数字,所以直接强制转换为字符输出 System.out.print((char) data); } } catch (IOException e) { //异常处理 } finally { try { if (stream != null) { // 关闭输入流 stream.close(); } } catch (IOException e) { } } }}
运行结果为:
111111111112121112211212
使用read()
方法的效率是很低的,在实际开发中,我们会经常使用read(byte[] b)
,另外JAVA输入流还提供了缓冲流。java.io.BufferedInputStream
就是字节输入缓冲流。BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。
字节输出流
上面介绍了JAVA的字节输入流,那么相反的就会有字节输出流。java.io.OutputStream类是表示输出字节流的所有类的超类。
在该类中,我们最常用的方法有如下几个:
输出流接受输出字节并将这些字节发送到某个接收器。与FileInputStream对应的有java.io.FileOutputStream类。下面我们就以FileOutputStream演示向文件中写入数据。
import java.io.FileOutputStream;import java.io.IOException;public class FileReadWrite{ public static void main(String[] args) { FileOutputStream stream = null; try { stream = new FileOutputStream("test.txt"); // 向输出流中写入数据 stream.write("11111".getBytes()); // 刷新此输出流并强制写出所有缓冲的输出字节 stream.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { // 关闭 if (stream != null) { stream.close(); } } catch (IOException e) { } } }}
使用示例
现在我们将输入流和输出流整合在一起,完成文件的复制。
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FileReadWrite{ /** * 复制文件 * * @param src * 源文件 * @param desc * 目标文件 * @return */ public boolean copy(String src, String desc) { FileInputStream inputStream = null; FileOutputStream outputStream = null; try { inputStream = new FileInputStream(src); outputStream = new FileOutputStream(desc); int len = -1; byte[] buffer = new byte[512]; // 循环读取,直至文件结束 while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } outputStream.flush(); } catch (IOException e) { e.printStackTrace(); return false; } finally { try { // 关闭 if (inputStream != null) { inputStream.close(); } } catch (IOException e) { } try { // 关闭 if (outputStream != null) { outputStream.close(); } } catch (IOException e) { } } return true; }}
- JAVA输入输出(IO)之字节流
- 第二十篇:JAVA输入输出(IO)之字节流
- java IO(输入输出) 字节流
- java基础5:io流对象之字节输入输出流
- java IO总结之字节流操作控制台输入输出
- IO(输入输出)-字节流
- java IO总结之字节流操作控制台输入输出(高效)
- IO之字节数组输入输出流
- Java基础-IO-字节输入输出流(笔记)
- JAVA IO字节输入输出流实例
- java IO(输入输出) 字节缓冲流
- 字节输入输出流:java.io.FileInputStream和java.io.FileOutputStream
- JAVA输入输出(IO)之字符流
- JAVA输入输出(IO)之常用流
- IO(输入输出)(一)字节流
- Java IO之输入输出流
- 黑马程序员————java基础---------IO输入输出之字节流
- 【IO流】字节输入输出流
- 你是码农还是优秀程序员?
- jsp实现下载文件
- Android屏幕截图
- 2015-12-29
- RxAndroid和RxJava的资料分享
- JAVA输入输出(IO)之字节流
- Javascript 学习笔记
- php中__autoload和spl_autoload_register的用法
- 书单
- 【splay】BZOJ 1500: [NOI2005]维修数列
- mysql 授权用户
- android 修改listview item view 的方法
- 横竖屏切换onSaveInstanceState() 和 onRestoreInstanceState()
- 用于去掉button外部的边线