栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

对象流(序列化);随机读取文件流

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对象流(序列化);随机读取文件流

目录
  • 对象流
    • 序列化
    • 反序列化
    • 代码
  • 自定义类的序列化和反序列化
    • 代码
  • 随机读取文件流
    • 构造器
    • 数据的插入
  • NIO

对象流

ObjectInputStream和ObjectOutputStream
用于存储和读取基本数据类型的数据或对象的处理流,它可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。

序列化

用ObjectOutputStream类保存基本类型数据或对象的机制。
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。
当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。

反序列化

用ObjectInputStream类读取基本类型数据或对象的机制,

代码
        //序列化过程
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("hello.dat"));
            oos.writeObject(new String("abcdefg"));
            oos.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(oos!=null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //反序列化过程
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream("hello.dat"));
            Object obj = null;
            try {
                obj = ois.readObject();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            String str = (String) obj;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(ois!=null) ois.close();
        }
自定义类的序列化和反序列化

JAVA的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。

  1. 实现接口:Serializable
  2. 当前类提供一个全局常量:serialVersionUID
  3. 除了当前类必须实现接口外,还必须保证其内部所有属性也必须是可序列化的。
代码
public class Person implements Serializable {
    
    //提供一个全局常量
    public static final long serialVersionUID = 3247612397781L;

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

随机读取文件流

RandomAccessFile
其既可以作为一个输入流,又可以作为一个输出流。

构造器

public RandomAccessFile(String name,String mode)
创建RandomAccessFile类实例需要指定一个mode参数,该参数指定其访问模式:

  • r:只读,文件不存在不会创建文件。
  • rw:打开以便读取和写入,文件不存在会创建文件。
  • rwd:打开以便读取和写入,同步文件内容的更新
  • rws:打开以便读取和写入,同步文件内容和元数据的更新
数据的插入
        RandomAccessFile raf1 = new RandomAccessFile("hello.txt","rw");
        raf1.seek(3); //将指针调到角标为3的位置
        raf1.write("aaa".getBytes());
        raf1.close();
NIO

jdk7.0引入了Path,Paths,Files三个类。可以用于对文件的操作。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885370.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号