Java中的IO补充

3.字节流实现文件拷贝 :
    数据源---文件字节输入流--->程序---文件字节输出流---->目的地
    步骤 :
        1.建立联系(数据源,目的地)
        2.构建流(文件字节输入流 文件字节输出流)
         3.读入写出
        4.刷出
        5.关闭
4.字符流实现文件拷贝 :   只能拷贝纯文本文件
    字符输入流 : Reader
    文件字符输入流  FileReader
    字符输出流 : Writer
     文件字符输出流  FileWriter
5.功能流 : 加强节点流的功能,提高节点流的性能
    必须包裹节点流进行使用
     缓冲流 : 加快读写效率  Buffered
        字节缓冲流: 提高字节流节点流读写效率
             字节输入缓冲流BufferedInputStream : 缓冲字节输入节点流
            字节输出缓冲流BufferedOutputStream : 缓冲字节输出节点流
            以上两个类型没有新增方法,可以发生多态
        字符缓冲流 : 提高字符流节点流读写效率
            字符输入缓冲流BufferedReader : 缓冲字符输入节点流
             新增方法 : String readLine()  读取一行文本。
            字符输出缓冲流BufferedWriter : 缓冲字符输出节点流
            新增方法 : void newLine()  写入行分隔符。
     Data流 : 数据流 | 基本数据类型流
        能够让节点流在读写数据的同时读写其数据类型(基本数据类型|String)
        是字节流的功能流
         DataInputStream : 修饰字节输入节点流
             新增方法 :  xxx readXxx() 读取对应类型的数据返回
        DataOutputStream : 修饰字节输出节点流
            新增方法 : void writeXxx(xxx) 写出XXX类型的数据
        注意 : 读入与写出的顺序需要保持一致
            java.io.EOFException 当通过数据输入流读取时候,类型不匹配,或者不是读入源文件都有能遇到的异常
     对象流 : Object
        读写对象数据
        字节流的功能流
        序列化 :
             将对象转为可存储或者可传输的状态的过程
             序列化输出流 : ObjectOutputStream
                新增方法 : final void writeObject(Object obj) 将指定对象写入 ObjectOutputStream。
            反序列化输入流 : ObjectInputStream
                新增方法 : final Object readObject() 从 ObjectInputStream 中读取一个对象。
            注意 :
                       需要先序列化后反序列化
                        不是所有类型的对象都能序列化   java.io.Serializable
                        不是所有的属性都需要序列化 transient
                        静态属性不会被序列化
                        如果父类实现了序列化接口,子类没有实现,子类可以序列化所有的内容
                        如果父类没有实现序列化接口,子类实现了,子类只能序列化子类独有的内容
        序列号 : 在实现了序列化的类型中必会存在一个序列号,如果显示提供了以自定义的为主,如果没有显示提供,会存在默认的序列号
             作用 : 可以实现检测前后版本一致问题
             因为当类中的成员存在变动,如果是显示自定义的序列号没有影响,但是如果使用的是默认提供的序列号,会自动更新
        实现前后版本兼容问题 :
            手动提供序列号
         可以通过idea快捷键自动生成序列号 :
            1.类实现序列化接口
             2.settings设置
            3.选中类名->alt+enter->生成序列化字段
File src = new File("D://AAA/test2.txt");
        File dest = new File("D://AAA/test4.txt");
        //2.构建流(文件字符输入流   文件字符输出流)
        FileReader rd = new FileReader(src);
        FileWriter rt = new FileWriter(dest);
        //3.读写
        char[] car = new char[1024];
        int len = -1;
        while((len=rd.read(car))!=-1){
            rt.write(car,0,len);
        }
        //4.刷出
        rt.flush();
        //5.关闭
        rt.close();
        rd.close();

<think>好的,我现在需要帮助用户了解JavaIO流的常见应用场景,并且提供示例。首先,我应该回顾一下用户提供的引用内容,看看有哪些相关的信息可以利用。 根据引用[1],Java IO流分为字节流和字符流,常用的类包括FileInputStream、FileOutputStream,以及缓冲流和对象流。引用[2]和[3]提到了缓冲流和对象流的具体代码示例,比如使用BufferedReader读取文件,以及对象流的序列化和反序列化。引用[4]则展示了FileOutputStream的使用,包括追加模式和异常处理。 接下来,我需要整理常见的应用场景。通常IO流用于文件读写、网络通信、数据传输等。结合引用中的内容,可以分几个大类: 1. **文件读写**:这是最基本的应用,比如用FileInputStream读取文件,FileOutputStream写入文件。引用[4]中的示例就是文件写入,并且提到了追加模式。此外,缓冲流如BufferedReader可以提高读取效率,这在引用[3]中有示例。 2. **对象序列化**:对象流ObjectInputStream和ObjectOutputStream用于将对象写入文件或从文件读取,这在引用[2]的示例中有所体现,比如读取单个对象。 3. **缓冲处理**:缓冲流如BufferedInputStream和BufferedWriter可以减少IO操作次数,提升性能,引用[3]中的BufferedReader就是一个例子。 4. **数据格式处理**:比如数据流DataInputStream和DataOutputStream处理基本数据类型,这在引用中没有直接提到,但属于常见应用,可能需要补充。 5. **异常处理**:引用[4]提到了字节流写数据时的异常处理,通常使用try-with-resources来自动关闭资源,确保异常情况下资源释放。 需要注意用户提到的引用内容,尽量在回答中引用这些资料。例如,在讲文件读写时,可以引用[1]和[4];对象序列化部分引用[2];缓冲流引用[3]。 另外,用户要求结构清晰,分点回答,每个场景给出示例代码。需要确保代码语法正确,并且使用正确的格式,比如独立公式用$$,但这里可能代码块更多,所以用代码框包裹。 可能的问题点:用户提供的引用中是否有遗漏的部分?比如数据流没有提到,是否需要包含?根据用户的问题,常见应用场景应包括主要的,所以即使引用中没有,可以简要提及,但重点放在引用提到的内容上。 最后,生成相关问题,需要与IO流相关,可能涉及不同流的选择、异常处理、性能优化等,参考用户提供的示例问题,比如快速排序的相关问题,这里可以问及缓冲流的优势、对象序列化的注意事项等。 现在整理回答结构: 1. 文件读写操作:字节流示例,如FileOutputStream写文件(引用[4]),FileInputStream读文件(引用[1])。可能提到追加模式。 2. 缓冲处理:缓冲流提升效率,如BufferedReader读取文本(引用[3])。 3. 对象序列化:对象流读写对象(引用[2])。 4. 异常处理:try-with-resources的应用,如引用[4]中的示例。 每个部分给出代码示例,并标注引用来源。然后相关问题可能涉及这些场景的细节,比如如何选择字节流和字符流,缓冲流的工作原理,序列化的要求等。 需要检查代码是否正确,比如引用[4]中的代码是否有转义问题,比如“<”应该是“<”,在代码示例中需要修正。同时,用户提供的引用中有没有其他需要注意的地方,比如引用[2]中的读取对象示例是否正确。 总结:按照应用场景分点,结合引用中的示例,确保每个部分都有对应的引用标注,代码正确,结构清晰。</think>### Java IO流常见应用场景及示例 #### 1. 文件读写操作 **字节流**适用于所有类型的文件(包括二进制文件)。 - **写入文件**:使用$FileOutputStream$,支持追加模式(参数$append=true$)[^4]。 ```java // 示例:写入10次"hello"并换行(追加模式) FileOutputStream fos = new FileOutputStream("fos.txt", true); for (int i = 0; i < 10; i++) { fos.write("hello".getBytes()); fos.write("\r\n".getBytes()); } fos.close(); ``` - **读取文件**:使用$FileInputStream$逐字节读取[^1]。 ```java FileInputStream fis = new FileInputStream("input.txt"); int data; while ((data = fis.read()) != -1) { System.out.print((char) data); } fis.close(); ``` #### 2. 缓冲处理提升性能 **缓冲流**通过减少直接IO操作次数提高效率。 - **读取文本文件**:使用$BufferedReader$逐行读取[^3]。 ```java try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } ``` #### 3. 对象序列化与反序列化 **对象流**用于将对象持久化存储或网络传输。 - **写入对象**:使用$ObjectOutputStream$[^2]。 ```java ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt")); oos.writeObject(new User("Alice", 25)); oos.close(); ``` - **读取对象**:使用$ObjectInputStream$。 ```java ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.txt")); User user = (User) ois.readObject(); System.out.println(user); // 输出反序列化后的对象 ois.close(); ``` #### 4. 异常处理与资源管理 使用$try\text{-}with\text{-}resources$语法自动关闭流,避免资源泄漏。 ```java try (FileOutputStream fos = new FileOutputStream("data.txt")) { fos.write("Hello".getBytes()); } catch (IOException e) { e.printStackTrace(); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值