zoukankan      html  css  js  c++  java
  • IO流

    IO流

    1.流的分类:
    依照数据流向的不同:输入流  输出流
    依照处理数据的单位的不同:字节流(处理二进制文件)  字符流(处理的文本文件)
    依照角色的不同:节点流(直接作用于文件的)  处理流(作用于节点流或处理流)

    2.IO的体系
    抽象基类  >>节点流(文件流)       >>         缓冲流(处理流的一种)
    InputStream  >> FileInputStream  >>  BufferedInputStream
    OutputStream  >> FileOutputStream  >> BufferedOutputStream
    Reader  >> FileReader  >> BufferedReader
    Writer  >> FileWriter  >> BufferedWriter

    3.经常用法
    ①。

    FileInputStream
        public int read():读取一个字节,如没有则返回-1
        public int read(byte[] b):读取一个字节数组,如没有返回-1(经常使用byte[1024])
        public int read(byte[] b, int off, int len):读取指定长度的字节数组。如没有返回-1
        public void close():关闭字节流
    ②。

    FileOutputStream
        public void write(int b):写入一个字节
        public void write(byte[] b):写入一个字节数组
        public void write(byte[] b,int off,  int len):写入指定长度是字节数组(经常使用)
        public void close():关闭输出流
    ③。

    FileReader
        public int read():读取一个字符,如没有则返回-1
        public int read(char[] c):读取一个字符数组,如没有返回-1(经常使用byte[1024])
        public int read(char[] c, int off, int len):读取指定长度的字符数组,如没有返回-1
        public void close():关闭字符流
    ④。FileWriter
        public void write(int c):写入一个字符
        public void write(byte[] c):写入一个字符数组
        public void write(byte[] c,int off,  int len):写入指定长度是字符数组(经常使用)
        public void close():关闭输出流
    ⑤。BufferedInputStream
        public int read():读取一个字节,如没有则返回-1
        public int read(byte[] b):读取一个字节数组,如没有返回-1(经常使用byte[1024])
        public int read(byte[] b, int off, int len):读取指定长度的字节数组,如没有返回-1
        public void close():关闭输入缓冲流,也会把字节流关闭
    ⑥。

    BufferedOutputStream
        public void write(int b):写入一个字节
        public void write(byte[] b):写入一个字节数组
        public void write(byte[] b,int off,  int len):写入指定长度是字节数组(经常使用)
        public void close():关闭输出缓冲流。也会把字节流关闭
    ⑦。BufferedReader
        public int read():读取一个字符。如没有则返回-1
        public int read(char[] c):读取一个字符数组,如没有返回-1(经常使用byte[1024])
        public int read(char[] c, int off, int len):读取指定长度的字符数组,如没有返回-1
        public String readLine():读入一行数据,返回一个字符串。如没有数据。则返回null
        public void close():关闭输入缓冲流,也会把字节流关闭
    ⑧。

    BufferedWriter
        public void write(int c):写入一个字符
        public void write(byte[] c):写入一个字符数组
        public void write(byte[] c,int off,  int len):写入指定长度是字符数组(经常使用)
        public void write(String s, int off, int len):写入指定长度是字符数组(经常使用)
        public void close():关闭输出缓冲流,也会把字节流关闭
        public void flush():刷新输出缓冲流
        public void newLine():换行

    4.其它流
    ①。转换流:实现字节流与字符流之间的转换
        InputStreamReader:解码:字节数组--->字符串
        OutputStreamWriter:解码:字节数组--->字符串
    ②。

    标准的输入输出流:
        标准的输出流:System.out:默认输出到控制台
        标准的输入流:System.in:从键盘读取输入数据
    ③。打印流
        字节流:PrintStream
        字符流:PrintWriter
    ④。

    数据流:用来处理基本数据类型、String、字节数组的数据:
        DataInputStream
        DataOutputStream
        用数据流写入的数据。应该用数据流读出,否则可能出现乱码
    5.对象流
    ObjectInputStream和ObjectOutputSteam
    用于存储和读取对象的处理流。

    它的强大之处就是能够把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。
    序列化(Serialize):用ObjectOutputStream类将一个Java对象写入IO流中
    反序列化(Deserialize):用ObjectInputStream类从IO流中恢复该Java对象
    ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
    ①。

    对象序列化机制
    同意把内存中的Java对象转换成平台无关的二进制流,从而同意把这样的二进制流持久地保存在磁盘上。或通过网络将这样的二进制流传输到还有一个网络节点。


    当其他程序获取了这样的二进制流,就能够恢复成原来的Java对象

    序列化的优点在于可将不论什么实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可被还原
    序列化是 RMI(Remote Method Invoke – 远程方法调用)过程的參数和返回值都必须实现的机制,而 RMI 是 JavaEE 的基础。因此序列化机制是 JavaEE 平台的基础
    假设须要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类必须实现例如以下两个接口之中的一个:Serializable或Externalizable

    ②。

    凡是实现Serializable接口的类都有一个表示序列化版本号标识符的静态变量:
    private static final long serialVersionUID;
    serialVersionUID用来表明类的不同版本号间的兼容性
    假设类没有显示定义这个静态变量,它的值是Java执行时环境依据类的内部细节自己主动生成的。

    若类的源码作了改动,serialVersionUID 可能发生变化。

    故建议。显示声明
    显示定义serialVersionUID的用途
    希望类的不同版本号对序列化兼容,因此需确保类的不同版本号具有同样的serialVersionUID
    不希望类的不同版本号对序列化兼容,因此需确保类的不同版本号具有不同的serialVersionUID

    ③。

    若某个类实现了 Serializable 接口,该类的对象就是可序列化的:
    创建一个 ObjectOutputStream
    调用 ObjectOutputStream 对象的 writeObject(对象) 方法输出可序列化对象。注意写出一次。操作flush()
    反序列化
    创建一个 ObjectInputStream
    调用 readObject() 方法读取流中的对象
    强调:假设某个类的字段不是基本数据类型或 String  类型。而是还有一个引用类型。那么这个引用类型必须是可序列化的,否则拥有该类型的 Field 的类也不能序列化

    6.RandomAccessFile 类支持 “随机訪问” 的方式,程序能够直接跳到文件的随意地方来读、写文件
       支持仅仅訪问文件的部分内容
       能够向已存在的文件后追加内容
    ①。

    RandomAccessFile 对象包括一个记录指针。用以标示当前读写处的位置。RandomAccessFile 类对象能够自由移动记录指针:
    long getFilePointer():获取文件记录指针的当前位置
    void seek(long pos):将文件记录指针定位到 pos 位置

    ②。

    构造器
    public RandomAccessFile(File file, String mode)
    public RandomAccessFile(String name, String mode)
     
    创建 RandomAccessFile 类实例须要指定一个 mode 參数。该參数指定 RandomAccessFile 的訪问模式:
    r: 以仅仅读方式打开
    rw:打开以便读取和写入
    rwd:打开以便读取和写入;同步文件内容的更新
    rws:打开以便读取和写入;同步文件内容和元数据的更新

  • 相关阅读:
    Python 更新pip报错:Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
    Vs code 配置(1)-win10
    博客园主题--sukura
    log4j
    安装ant问题
    freemarker string= null
    学习随想
    j2ee学习资料收集
    eclipse + marven
    好文mark
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6853725.html
Copyright © 2011-2022 走看看