一、对象的序列化、持久化。

    将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系列之常用流二的更多相关文章

  1. io系列之常用流一

    一. 读取键盘录入和数据打印 在System类中, System.out: 对应的是标准输出设备(控制台)(一个PrintStream). System.in: 对应的是标准输入设备(键盘)(一个In ...

  2. io系列之字符流

    java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看. 本篇为此系列随笔的第一篇:io系列之字符流. IO流 :对数据的传输流向进行操作,ja ...

  3. Java IO流(二)

    目录 字节缓冲流 概述 BufferedOutputStream类 继承父类的共性成员方法 构造方法 BufferedInputStream类 继承自父类的方法: 构造方法 文件复制练习(增强版 使用 ...

  4. Java NIO系列教程(十二) Java NIO与IO

    当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代 ...

  5. JAVA IO 字节流与字符流

    文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.     ...

  6. java io系列01之 "目录"

    java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...

  7. SpringMVC常用配置(二),最简洁的配置实现文件上传

    Spring.SpringMVC持续介绍中,基础配置前面已经介绍了很多,如果小伙伴们还不熟悉可以参考这几篇文章: 1.Spring基础配置 2.Spring常用配置 3.Spring常用配置(二) 4 ...

  8. io系列之字节流

    java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看. 本篇为此系列随笔的第一篇:io系列之字节流. 一.字节流的File读写操作. Inpu ...

  9. Hexo系列(三) 常用命令详解

    Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...

随机推荐

  1. Linux基础学习(10)--Shell基础

    第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...

  2. WEB相关概念、Tomcat初识、Servlet、基本知识。

    /* * 一.web的概念? * 1.web就是在http协议基础之上, 利用浏览器进行访问的网站. * Web Page指网站内的网页. 我们常说的WWW(World Wide Web 万维网)就是 ...

  3. js定时函数,定时改变字体的大小

    <html> <head> </head> <body> <div id="d"> js控制字体大小 </div& ...

  4. endnote插入文献时出现{,#}这样的乱码

    1)在每次插入文献后,再点击一下Bibliography里面的Update Citation and Bibliography即可: (2)较好的解决方法也较为简单,只需要再一次进入Word中的End ...

  5. spring和junit整合

  6. HTML5 ----- deviceorientation API

    当我们把设备举到面前,就是坐公交车时玩手机的状态,手机的宽度(水平方向)就是X轴,从左向右依次变大:手机的高度(垂直方向)就是y轴,从下到上依次变大: 眼光盯着屏幕,我们的视线就是Z轴,离我们的眼睛越 ...

  7. 小程序 official-account

    只需要在页面中添加 <official-account></official-account> 需要注意的是: 1.当小程序从扫二维码场景(场景值1011)打开时 2.当小程序 ...

  8. 前端bug记录

    记录一下前端入门时期遇到的一些bug. 1.同步.异步问题 背景:Javascript语言的执行环境是单线程.即一次只能完成一个任务.若有多个任务则需排队逐个执行——前一个任务完成,再执行后一个任务. ...

  9. Spring Boot自动配置与Spring 条件化配置

    SpringBoot自动配置 SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,简化开发时间,无需浪费时间讨论具体的Spring配置,只需考虑如何利用SpringBoot的自动配置即 ...

  10. python爬虫requests模块

    requests库的七个主要方法 1. requests.requests(method, url, **kwargs) 构造一个请求,支撑以下各方法的基础方法 method:请求方式,对应get/p ...