java输入输出流 流式输入与输出
要串行化一个对象,必须与一定的对象输入/输出流联系起来,通过对象输出流将对象状态保存下来,再通过对象输入流将对象状态恢复。 java.io包中,提供了ObjectInputStream和ObjectOutputStream将数据流功能扩展至可读写对象。在ObjectInputStream中用readObject()方法可以直接读取一个对象,ObjectOutputStream中用writeObject()方法可以直接将对象保存到输出流中。 【Java输入输出流详解】 Java输入输出流(Input/Output Stream)是Java平台核心API的重要组成部分,主要用于处理数据的输入和输出。Java的I/O机制是基于流的,即数据以流的形式从一个地方传输到另一个地方。Java的I/O流分为两大类:字节流(Byte Stream)和字符流(Character Stream),并根据数据流向的不同,又可以分为输入流(InputStream和Reader)和输出流(OutputStream和Writer)。 1. 字节流 字节流主要处理字节数据,适用于处理二进制数据,如图片、音频等。在Java中,InputStream是所有字节输入流的抽象基类,提供了基础的读取字节的方法。例如: - `int read()`:读取单个字节,返回0-255之间的整数或-1表示流结束。 - `int read(byte[])`:读取多个字节到指定的字节数组。 - `int read(byte[],int,int)`:从指定位置开始读取指定数量的字节。 OutputStream是所有字节输出流的抽象基类,提供了写入字节的方法。如: - `void write(int)`:写入一个字节。 - `void write(byte[])`:写入整个字节数组。 - `void write(byte[],int,int)`:从数组指定位置开始写入指定数量的字节。 2. FileInputStream和FileOutputStream FileInputStream和FileOutputStream是字节流的典型应用,用于从文件读取和向文件写入数据。构造这两个类的对象时,需要传入文件的路径。FileInputStream用于读取,FileOutputStream用于写入。需要注意,读取文件时文件必须存在并可读,写入文件时,如果文件已存在,会覆盖原有内容。 3. 缓冲流(BufferedInputStream和BufferedOutputStream) 为了提高I/O操作的效率,Java引入了缓冲流。BufferedInputStream和BufferedOutputStream是过滤器流,它们在字节流的基础上添加了缓冲区,可以批量读写数据,减少系统调用的次数,从而提升性能。 4. 对象序列化与反序列化 Java提供了ObjectInputStream和ObjectOutputStream来支持对象的序列化和反序列化。对象序列化是将对象的状态转换为字节流的过程,反序列化则是将字节流恢复为对象。这两个类扩展了字节流的功能,使得我们可以通过`writeObject()`方法将对象保存到输出流,然后通过`readObject()`方法从输入流中读取对象。序列化不仅可以用于持久化对象,还可以用于在网络间传输对象。 5. DataInputStream和DataOutputStream DataInputStream和DataOutputStream提供了一种更方便的方式来读写基本数据类型,如int、float、double等。这些类提供了诸如`readInt()`、`writeDouble()`等方法,简化了数据的读写操作。 6. FilterStream、PushbackInputStream和PipedStream FilterStream是所有过滤流的基类,用于在现有流上添加功能。PushbackInputStream允许“回退”或退回已读取的字节,这在需要重新处理某些数据时非常有用。PipedStream允许两个线程间通过管道进行数据传输。 7. 文件复制示例 下面是一个使用Java I/O流进行文件复制的例子: ```java try { FileInputStream fis = new FileInputStream("source.txt"); FileOutputStream fos = new FileOutputStream("target.txt"); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } fos.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } ``` 这段代码创建了两个流,一个用于读取源文件,一个用于写入目标文件。通过不断读取和写入数据,实现了文件的复制。 总结,Java的输入输出流系统是一个灵活且强大的工具,涵盖了多种类型的流,可以处理不同数据类型和来源的数据,同时通过缓冲和过滤等功能,优化了数据的读写效率。理解并熟练运用Java的I/O流,对于开发涉及数据交换的Java应用程序至关重要。
- 粉丝: 2
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 没用333333333333333333333333333333
- 基于Vue和SpringBoot的企业员工管理系统2.0版本设计源码
- 【C++初级程序设计·配套源码】第2期-基本数据类型
- 基于Java和Vue的kopsoftKANBAN车间电子看板设计源码
- 影驰战将PS3111 东芝芯片TT18G23AIN开卡成功分享,图片里面画线的选项很重要
- 【C++初级程序设计·配套源码】第1期-语法基础
- 基于JavaScript、CSS、HTML的简易DOM版飞机游戏设计源码
- 基于Java开发的日程管理FlexTime应用设计源码
- SM2258XT-BGA144-4BGA180-6L-R1019 三星KLUCG4J1CB B0B1颗粒开盘工具 , EC, 3A, 94, 43, A4, CA 七彩虹SL300这个固件有用
- GJB 5236-2004 军用软件质量度量