Java IO(三)

Object流

  • 直接将Object写入或写出
    • TsetObjectIO.java
    • transient关键字
    • serializable
    • externalizable

序列化:直接将Object转换成字节流

serializable接口标记类的对象可以序列化,在序列化的时候,我们是无法控制的,是jdk帮你去实现序列化,如果我们想要自己来控制序列化,就得使用externalizable接口实现此接口。
这个接口有俩个方法,我们自己实现这俩个方法就可以自己来控制序列化的生成:

例子

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
 * 一.Object流
 *        ObjectOutputStream流/ObjectInputStream流
 * 二.补充Externalizable(可外部化的)接口 
 * 作用:手动控制   序列可视化
 * @Override
                public void writeExternal(ObjectOutput out) throws IOException {
                }
                
                @Override
                public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
                }
 */
public class TestObjectIO {
    public static void main(String[] args) throws ClassNotFoundException {
        T t=new T();
        t.k=8;
        try {//确定输出文件
            FileOutputStream fos=new FileOutputStream("C:/Users/Desktop/Object.txt");
            //给输出流套上ObjectOutputStream管道
            ObjectOutputStream oos=new ObjectOutputStream(fos);
            //将指定的对象写入ObjectOutputStream
            oos.writeObject(t);
            oos.flush();
            oos.close();//关闭流
            //从输出文件中读取信息
            FileInputStream fis=new FileInputStream("C:/Users//Desktop/Object.txt");
            //写入流上套上ObjectInputStream管道
            ObjectInputStream ois=new ObjectInputStream(fis);
            //从ObjectInputStream读取一个对象
            T tReaded=(T) ois.readObject();//将其全部读出来,强制转换成T类型,
            System.out.println(tReaded.i+" "+tReaded.j+" "+tReaded.d+" "+tReaded.k);//进行输出
        } catch (IOException e) {
            
            e.printStackTrace();
        }
    }
}
/*
 * serializable(序列化)标记此类可序列化
 * 如果要序列化,必须实现此接口,java中这个接口为标记性的接口,在这个接口中并没有定义方法
 */
class T implements Serializable
{
    int i=0;
    int j=9;
    double d=2.3;
    //关键字,透明的
    //int k = 15;
    transient int  k=15;
    //使用这个关键字,k运行结果为0,当这个关键字修饰成员变量时,在序列化的时候不做处理
}

我们来将IO流给整理一下

含义
InputStream/OutputStream 字节输入输出流
Reader/Writer 字符输入输出流
FileInputStream/FileOutputStream 对字节文件的输入输出流
FileReader/FileWriter 对字符文件的输入输出流
BufferedInputStream/BufferedOutputStream 带缓冲区的字节输入输出流
BufferedReader/BufferedWriter 带缓冲区的字符输入输出流
ByteArrayInputStream/ByteArrayOutputStream 对一个内存里的字节数组进行读写
InputStreamReader/OutputStreamWriter 转换流
DataInputStream/DataOutputStream 直接写最基础的数据类型
PrintStream/PrintWriter 打印字节字符流
ObjectInputStream/ObjectOutputStream Object流、序列化、掌握其中关键字及接口
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转换流 在学习字符流(FileReader、FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可...
    cuzz_阅读 218评论 0 1
  • 接上篇《JavaSE 基础学习之四 —— 异常的处理》 五. JavaSE 基础学习 —— IO 操作 (java...
    琦小虾阅读 635评论 0 0
  • 1 I/O流的概念,分类2 I/O所有类的结构图及详解3 何为NIO,和传统I/O有何区别4 在开发中正确使用I/...
    艾剪疏阅读 502评论 0 2
  • 02.java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputSt...
    My0o0Heart阅读 256评论 0 3
  • 本文内容非原创,你可以点击此处查看内容来源声明 输入/输出流 在Java API中,可以从其中读出一个字节序列的对...
    _gitignore阅读 2,604评论 0 0