• 第五周学习视频(二)


    一、“流”的分类

    (1) 按照流向分可以分为输入流和输出流。
    输入流:只能从中读取数据,不能写入数据 (基类是InputStream和Reader) 。
    输出流:只能向其中写入数据,不能读取数据(基类是OutputStream和Writer) 。
    (输入/读取:input->main;输出/写入:output<-main)
    (2) 按照操作的数据单元分为字节流和字符流。
    字节流:操作的数据单元是8bit的字节(基类是InputStream和OutputStream),它 以二进制格式存储数据
    字符流:操作的数据单元是16bit的字节(unicode字符)【单字节的ASCII码时用0补齐至16bit】(基类时Reader和Writer),它以字符顺序存储数据
    (3) 按照角色可以分为节点流和处理流。
    节点流(低级流):可以从/向一个特定的IO设备中读/写数据的流,也被称为低级流。
    处理流(高级流):用于对一个已存在的流进行连接或封装来实现读/写功能,也称为高级流或包装流。

    二、文件与流

    (1)Java将每个文件都视为流的存储。
    (2)程序员根据实际应用的需要指定文件的结构。
    (3)文件类型:
    基于字节的流创建的文件,称为二进制文件。
    基于字符的流创建的文件,称为文本文件。

    三、File类

    (1)File类不负责数据的输入输出,而是专门用于管理文件和目录。
    (2)每个File对象表示一个磁盘文件或者目录,其对象属性中包含了文件或目录的相关信息,如名称、长度、所含文件个数等。
    (3)它还提供相应的方法用来获取路径、目录和文件的相关信息。
    eg.File f1 = new File("/etc/passwd");
    File f2 = new File("/etc", "passwd");

    四、处理文件

    使用FileInputStream、 FileOutputStream来创建文件流,这两个类负责对本地文件进行数据读写。
    例如:假设参数fp指输入输出的文件名。
    打开文件,准备读数据:FileInputStream in=new FileInputStream(fp);
    打开文件,准备写数据:FileOutputStream out=new FileOutputStream(fp);


    当文件无法正常打开时,将发生异常,程序对此异常进行处理。(受检异常,编译不过时抛出 IOException,所以必须进行该部分异常处理

     try{
            ……
     }
     catch (IOException e)
     {   ……    } 
    

    五、对象序列化

    有时,无法准确知道数据是如何存储在文件中的,此时我们希望能从文件中读取或者写入整个对象。Java提供这种机制,称为对象序列化。
    对象序列化(Serialize)是指将一个Java对象写入IO流中。
    对象反序列化(Deserialize)是指从IO流中恢复该Java对象。
    序列化必须实现Serializable和 Externalizable接口。


    至少有下面两种场景需要序列化:
    远程方法调用 (RMI)——通过socket进行对象的复制和通讯等;
    程序版本升级问题。

    // J_SerialData.java;  
    //     序列化例程: 序列化数据 
    import java.io.Serializable; 
     
    public class J_SerialData implements Serializable 
    {
         static final long serialVersionUID = 123456L;
         int m_id = 111; 
     
         public void mb_output( )     {
             System.out.println("序号是: " + m_id);
         } // 方法mb_output结束 
    } // 类J_SerialData结束  
    
    // J_ObjectOutputStream.java;  
    //     对象输出例程 import java.io.FileOutputStream;
    import java.io.ObjectOutputStream; 
     
    public class J_ObjectOutputStream {
         public static void main(String args[ ]) throws Exception
         {
             ObjectOutputStream f = new ObjectOutputStream
                 (new FileOutputStream("object.dat"));
             J_SerialData s = new J_SerialData( );
             f.writeObject(s);
             f.writeObject("字符串对象序列化示例");
             f.close( );
         } // 方法main结束 
    } // 类J_ObjectOutputStream结束 
    
  • 相关阅读:
    deepin/uos和局域网其他机器无法ping通
    Ubuntu18.04完全卸载vscode
    批量拉取github组织或者用户的仓库
    vmware uos挂载windows共享目录
    清空容器另类方式
    time_t 时间格式化字符串
    条件变量condition_variable
    C++多维堆数组定义
    arm64 ubuntu18.04 bionic安装bcc tools
    win10下载编译chromium
  • 原文地址:https://www.cnblogs.com/caihan/p/12516545.html
Copyright © 2020-2023  润新知