io系列之常用流二
一、对象的序列化、持久化。
将java的对象的基本数据类型和图形存入文件中,实现对象数据的序列化和持久化。
操作对象可以使用: ObjectOutPutStream 和 ObjectInPutStream ,
而被操作的对象: 必须实现 Serializable 接口(标记接口)
ObjectOutPutStream:
构造方法: ObjectOutputStream(OutputStream out) 创建写入指定 OutputStream 的 ObjectOutputStream。
一般方法:void writeObject(Object obj) 将指定的对象写入 ObjectOutputStream。
该方法用于向文件中写入对象数据,与ObjectInputStream的 readObject方法配套使用。
另有其他存入各种数据的方法(与基本数据类型流同),和继承自OutputStream的方法,自行查阅文档。
ObjectInputStream:
构造方法: ObjectInputStream(InputStream in)创建读取指定 InputStream 的 objectInputStream。
一般方法: Object readObject() 从 ObjectInputStream 读取对象。
该方法用于从文件中读取对象数据,与ObjectOutputStream的 writeObject方法配套使用。
另有其他取出各种数据的方法(与基本数据类型流同),和继承自OutputStream的方法,自行查阅文档。
Serializable
一个标记接口,只有实现了该接口的类的对象才拥有被序列化,持久化的能力。该接口没有扩展功能。
实现了该接口的类,其中的静态成员也不能被序列化。
对于实现了该接口,其中有非静态,但是又不想被持久化的成员,我们可以使用 transient 关键字修饰它。
该接口通过类中的成员来计算一个标记值,成员有任何改动都会改变这个值,类和其对象都被该值标记,只有标记值相同的才能认为是对象属于该类。
我们可以使用在类中 (ANY-ACCESS-MODIFIER) static final long serialVersionUID = 42L; 来给成员修饰符固定一个标记值,此时成员的修饰符的
改变不再影响最终标记值的数值。使得我们对类的成员修饰符做了一定改动后,依然可以通过该类识别器原先固化的对象。
二、管道流。
输入输出可以相互连接的流。通常由一个线程的 PipedInputStream读取数据(从管道),之后由另一个流的 PipedOutputStream 输出数据(到管道),
如果两个流在同一个对象中存在,容易发生阻塞。
PipedInputStream
构造方法: PipedInputStream() 创建尚未连接的 PipedInputStream
PipedInputStream(PipedOutputStream pout)创建 PipedInputStream,使其连接到管道输出流 pout。
连接方法: void connect(PipedOutputStream src) 使此管道输入流连接到管道输出流 src。
其他方法: int available() 返回可以不受阻塞地从此输入流中读取的字节数 。
PipedOutputStream
构造方法: PipedOutputStream() 创建尚未连接的 PipedOutputStream
PipedOutputStream(PipedInputStream pin)创建PipedOutputStream,使其连接到管道输出流 pin。
连接方法: void connect(PipedInputStream pin) 使此管道输入流连接到管道输出流 in。
他们都是字节输入输出流的子类,其可以使用InputStream 和 OutputStream的共性方法。
三、RandomAccessFile类
该类可以根据构造函数传入的参数不同实现同时对文件进行读写功能,并能以字节的形式访问文件中的指定位置(类似于将文件看做一个大型的byte数组,
从第一个字节开始排列(一个汉子两个字节,字母一个字节,按照gbk排列))。
该类不是io体系中的成员,其内部已经封装了输入输出字节流,
构造函数: RandomAccessFile(File file, String mode) 创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定
参数 mode为 r表示只读, 为rw表示读写。
RandomAccessFile(String fileName, String mode)创建一个随机读取文件流,文件本身有fileName指定。
参数 mode为 r表示只读, 为rw表示读写。
当只传入r的时候,代表流对象为只读对象,此时传入的文件必须是存在的文件。否则会有异常。
当传入参数为rw时,代表流对象为读写对象,此时文件若存在则指向该文件,否则创建一个该文件(不会覆盖)
其他方法: 其基本read,write,close方法与FileInputStream和FileOutputStream相同。
int readInt() 从此文件读取一个有符号的 32 位整数。 (另有对应其他基本数据类型的相关方法)。
String readLine() 从此文件读取文本的下一行。
void writeInt(int v) 按四个字节将 int 写入该文件,先写高字节。(另有相对应的其他数据类型方法)。
int skipBytes(int n) 尝试跳过输入的 n 个字节以丢弃跳过的字节。
long getFilePointer() 返回此文件中的当前偏移量。(即当前指针位置。)
void seek(long pos) 设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
(此方法方便常用,重点掌握)。此方法配合写入方法,可以修改文件局部内容。
此方法配合读取方法可以获取文件局部内容。
四、基本数据类型流
专门进行基本数据类型操作的流。
DateOutputStream:
构造方法: DataOutputStream(OutputStream out) 创建一个新的数据输出流,将数据写入指定基础输出流
特有方法: int size() 返回计数器 written 的当前值,即到目前为止写入此数据输出流的字节数
void writeInt(int v) 将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。
存入一个int数据,类似方法还有对: short,float,double,boolean
dyte,char,long 等所有基本数据类型, 和String 的操作方法。
void writeUTF(String str) 以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。
使用该方法存入的数据必须使用 readUTF()方法读取。
注意:类ObjectOutputStream、 RandomAccessFile也具有上述除 size以外的所有功能。
DateInputStream:
构造方法:DateInputStream(InputStream in) 创建一个新的数据输入流,从指定基础输入流中读取数据。
特有方法:
int readInt() 读入一个int类型的值,就是读取四个字节。
读取一个int数据,类似方法还有对: short,float,double,boolean
dyte,char,long 等所有基本数据类型, 和String 的操作方法。
void readUTF() 以与机器无关方式使用 UTF-8 修改版编码从一个基础输入流中读取字符串。
该方法必须读取的是使用 writeUTF方法写入的数据。
注意: 类ObjectInputStream、 RandomAccessFile也具有上述全部功能。
注意: 使用读取类型的方法的顺序,必须与写入该文件的方法顺序相同,否则会读取失败。
五、ByteArrayStream
此类流的源和目的都是数组,没有涉及到系统底层资源, 该类没有close方法。
ByteArrayInputStream: 该流对象在建立的时候,需要接收一个数据源,该源是一个字节数组。
ByteArrayOutputStream: 该流对象在建立的时候,不需要指定数据目的,因为该对象内部封装了一个可变长度的byte数组。
特有方法: void reset() 将此 byte 数组输出流的 count 字段重置为零,从而丢弃输出流中目前已累积的所有输出。
int size() 返回缓冲区的当前大小。
void writeTo(OutputStream out) 将此 byte 数组输出流的全部内容写入到指定的输出流参数中,
这与使用 out.write(buf, 0, count) 调用该输出流的 write 方法效果一样。(此方法涉及异常)
其他方法与基本字节流 基本相同。
另外: 有CharArrayReader和CharArrayWriter,
StringReader 和 StringWriter
都是相应的源和目的都是内存的输入输出流,方法功能大致与字节数组流相当。
io系列之常用流二的更多相关文章
- io系列之常用流一
一. 读取键盘录入和数据打印 在System类中, System.out: 对应的是标准输出设备(控制台)(一个PrintStream). System.in: 对应的是标准输入设备(键盘)(一个In ...
- io系列之字符流
java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看. 本篇为此系列随笔的第一篇:io系列之字符流. IO流 :对数据的传输流向进行操作,ja ...
- Java IO流(二)
目录 字节缓冲流 概述 BufferedOutputStream类 继承父类的共性成员方法 构造方法 BufferedInputStream类 继承自父类的方法: 构造方法 文件复制练习(增强版 使用 ...
- Java NIO系列教程(十二) Java NIO与IO
当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代 ...
- JAVA IO 字节流与字符流
文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节. ...
- java io系列01之 "目录"
java io 系列目录如下: 01. java io系列01之 "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...
- SpringMVC常用配置(二),最简洁的配置实现文件上传
Spring.SpringMVC持续介绍中,基础配置前面已经介绍了很多,如果小伙伴们还不熟悉可以参考这几篇文章: 1.Spring基础配置 2.Spring常用配置 3.Spring常用配置(二) 4 ...
- io系列之字节流
java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看. 本篇为此系列随笔的第一篇:io系列之字节流. 一.字节流的File读写操作. Inpu ...
- Hexo系列(三) 常用命令详解
Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...
随机推荐
- peewee 事物 回滚
peewee 事物 回滚 #!/usr/bin/env python # coding=utf-8 from peewee import * db = MySQLDatabase(host='123. ...
- 洛谷 p1219 八皇后
刚参加完蓝桥杯 弱鸡错了好几道..回头一看确实不难 写起来还是挺慢的 于是开始了刷题的道路 蓝桥杯又名搜索杯 暴力杯...于是先从dfs刷起 八皇后是很经典的dfs问题 洛谷的这道题是这样的 上面的布 ...
- APP需求调研、对比
二.人脸验证 1.芝麻认证 : 0.4元/次,需要企业企业认证.不能有与芝麻信用类似的业务,如:保险... 2.旷视 : 0.5/次.企业认证.业务限制 3. 百度人脸识别 : 企业认证. 4.科大 ...
- 前端使用Javascrip实现图片轮播
Javascript实现网页图片自动轮播 1.创建一个img标签 设置默认图片,以及图片的高度和宽度,为了大家方便,我将CSS样式和JS语句都写在一个html文件中,演示用的图片来自小明官网:'htt ...
- Kafka消费时报错:Producer connection to xxx:9092 unsuccessful
使用kafka消费数据时报Producer错误,具体错误如下: kafka.producer.SyncProducer:103 Producer connection to xxx:9092 unsu ...
- mysql 集群方案
试试基于Galera的MySQL高可用集群 mha mgr
- kubernetes 编排详解 挂载
##kube挂载本地磁盘apiVersion: v1 kind: Pod metadata: name: redis spec: containers: - name: redis image: re ...
- 洛谷p1091合唱队形题解
题目 合唱队形首先要满足的是从1这个位置到中间任意的位置为单增的,从中间任意的位置到最后是单减的,且长度最长.这样才能满足出列的同学最少. 如果要满足这个条件那么我们可以先预处理出每个点的从前找的最长 ...
- IOS端 margin-top 和 margin-bottom 使用负数时的区别
有以下html代码 <div style="width: 30%;" class="shang"> 1 </div> <div s ...
- php 部署在iis HTTP 错误 500.0 - Internal Server Error 无法在<fastCGI>应用程序配置中找到<handler> scriptProcessor
原因,从A服务器复制一个部署在IIS上的PHP项目,根节点指向 publc/web.config 把里面涉及的 php路径改成正确的即可