zoukankan      html  css  js  c++  java
  • 流对象的简析

    对象流:有的时候,我们可能需要将内存中的对象持久化到硬盘上,或者将硬盘中的对象信息读到内存中,这个时候我们需要使用对象输入输出流。    

    序列化: 是对象转换成一个字节序列的过程,是一个写操作

    反序列化:   一个字节序列转换成对象的过程 ,是一个读操作

    ObjectOutputStream

    构造器:          

    ObjectOutputStream(OutputStream out)

              创建一个指定字节输出流的对象输出流对象。

              

    常用方法: 除了提供了一些基本数据类型的写方法外,还提供了

    void writeObject(Object obj)

              将内存中的对象持久化到硬盘上

                        

    ObjectIntputStream

         ObjectIntputStream(OutputStream out)

              创建一个指定字节输入流的对象输入流对象。

              

    常用方法:除了提供了一些基本数据类型的读方法外,还提供了

         Object readObject();

              从硬盘上读取一个字节序列,转换成对象

                   

    Serializable:序列化接口

              如果想将对象序列化,那么对象的类型必须实现此接口。此接口

    内什么都没有,只是一个序列化标识。

    serialVersionUID:

          每个能序列化的对象,在被序列化时,系统会默认给此对象的类计算一个

    序列化版本号。不同的平台默认提供的序列化版本号多数情况下不会相同。因此当我们反序列时,如果硬盘里存储的对象的版本号与当前设计的类型的版本号不一致。

    会出现运行时异常:

    java.io.InvalidClassException,这种情况叫不兼容问题。

       

    如果我们想解决不兼容问题。我们应该手动提供版本号。尽可能的相同这样来解决不兼容问题。

          

    另外一种情况:

    序列化过后,可能会修改类型,如果使用系统默认提供的版本号,在反序列时,会有异常,如果手动提供,不出现异常多出来的成员变量,以默认值的形式,赋值给反序列化回来的对象。

    transient:成员变量的一个修饰词,可以理解为瘦身。

    有的时候,在序列化对象时,我们不需要将对象的某些成员变量值持久化到硬盘上(因为不重要),此时,我们可以在这些成员变量前添加修饰词transient(保存时,进行减肥)

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    字符流:

    在输出输入操作时,以字符为单位进行操作,默认是unicode编码集。

    字符流的抽象父类分别是:

    Writer/Reader

       Writer提供了字符输出流的常用方法

         void close():关闭

         void write(char[] cbuf):写一个字符数组

         void write(char[] cbuf, int off, int len)写一个字符数组的一部分

         write(int c):写一个字符

         write(String str):写一串字符

         write(String str, int off, int len) 写字符串的一部分

       Reader提供了字符输入流的常用方法

         int read():读一个字符,存储到int的低16位

         int read(char[] cbuf):将数据读进字符数组中,返回的是读取的有效字符个数

         int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    子类中转换流:

        OutputStreamWriter:

                  将字符转换成字节写出到硬盘上

    构造器:          

        OutputStreamWriter(OutputStream out)

                  创建一个指定字节输出流的字符输出流对象,采用的是系统默认的编码集

        OutputStreamWriter(OutputStream out, Charset cs)

        OutputStreamWriter(OutputStream out, CharsetEncoder enc)

        OutputStreamWriter(OutputStream out, String charsetName)

                  创建一个指定字节输出流的字符输出流对象,采用指定编码集。

        

      write(int a);

                当a的低16位,如果被设计成相应的字符时,如果两个字节都是

    有效字节,会写出两个。如果低16位对应是无效字符,或是有效字节只有一位时,会写一个字节。      

       

       InputStreamReader()

                 将字节转换成字符读进程序中

    构造器:

        InputStreamReader(InputStream in)

                 创建一个使用默认字符集的InputStreamReader。  

        InputStreamReader(InputStream in, Charset cs)

    InputStreamReader(InputStream in, CharsetDecoder dec)

    InputStreamReader(InputStream in, String charsetName)

    创建一个使用指定字符集的InputStreamReader。  

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    缓冲流:

    PrintWriter:提供了丰富的方法,比BufferedWriter更加常用,此类型提供了

    行自动刷新的功能

    构造器:       

           PrintWriter(File file)

           PrintWriter(OutputStream out)

           PrintWriter(OutputStream out, boolean autoFlush)        

           PrintWriter(String fileName)

           PrintWriter(Writer out)

           PrintWriter(Writer out, boolean autoFlush)

           

    上述构造器,有第二个参数的,可以设置为true,表示行自动刷新。  

    只有一个参数的构造器,相当有两个参数时,设置为false的情况,即取消了行自动刷新的功能

           

    常用方法:

           println()

           通过写入行分隔符字符串来终止当前行。

           println(boolean x)

    打印一个布尔值,然后终止该行。  

    void println(char x)

    打印一个字符,然后终止该行。  

    void println(char[] x)

    打印字符数组,然后终止行。  

    void println(double x)

    打印双精度浮点数,然后终止行。  

    void println(float x)

    打印一个浮点数,然后终止该行。  

    void println(int x)

    打印一个整数,然后终止该行。  

    void println(long x)

    打印一个长整型,然后终止行。  

    void println(Object x)

    打印一个对象,然后终止该行。  

    void println(String x)  

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    BufferedReader:提供了一个缓冲区

    构造器:   

          BufferedReader(Reader in)

                创建使用默认大小的输入缓冲区的缓冲字符输入流。  

          BufferedReader(Reader in, int sz)

                创建使用指定大小的输入缓冲区的缓冲字符输入流。

    常用方法:  

          String readLine():

                读一行字符串,读至换行符号为止,返回的数据不包含换行符当返回值为null时,表示读至文件末尾

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    文件字符流:

       FileWriter/FileReader

       

       FileWriter:相当于OutputStreamWriter与FileOutputStream合起来的功能,内部也维护了一个缓冲区,但是需要手动flush

    构造器:

        FileWriter(File file)

        FileWriter(File file, boolean append)

        FileWriter(String fileName)

        FileWriter(String fileName, boolean append)

       

    append:表示追加,但是此流不能设置字符集。常用方法与 OutputStreamWriter的差不多

       

     FileReader:相当于InputStreamReader和FileInputStream合起来的功能内部也维护了一个缓冲区

    构造器:

          FileReader(File file)

          FileReader(String fileName)

    常用方法与InputStreamReader的方法差不多

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    System是一个final修饰的类型

    两个成员变量:

          out:是PrintStream类型,默认的输出目的地是控制台console

          in: 是InputStream类型, 默认的数据源是键盘

  • 相关阅读:
    Spring Boot
    Linux入门
    synchronized(一)
    避免XSS攻击
    MySql概述及入门(五)
    MySQL概述及入门(四)
    上传漏洞总结-upload-labs
    文件类型解析漏洞防御与攻击(PHP)
    Dvna for Owasp top 10 2017
    XSS 漏洞介绍
  • 原文地址:https://www.cnblogs.com/mark5/p/10919160.html
Copyright © 2011-2022 走看看