ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

I/O 再 review

2020-05-26 21:51:24  阅读:364  来源: 互联网

标签:java read review write io import new


 

 

package com.test.leon;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.Serializable;
import java.net.URL;

import org.omg.PortableInterceptor.DISCARDING;

public class DirectActFileStream {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 1. Source
        File src = new File("c:/Leon/abc.txt");
        File desc = new File("c:/Leon/to.txt");
        
        // 2. choose stream
        /*-- FileInputStream, FileOutputStream --*/
        FileInputStream fis = new FileInputStream(src); 
        FileOutputStream fos = new FileOutputStream(desc);
        // 3. prepare & read / write
        byte[] temp1 = new byte[1024]; 
        int len1 = -1; 
        len1 = fis.read(temp1);    // read
        fos.write(temp1);        // write
        // 4. close file    
        fis.close(); 
        fos.close();
        
        // 2. choose stream
        /*-- FileReader, FileWriter --*/
        FileReader fr = new FileReader(src);
        FileWriter fw = new FileWriter(desc);
        // 3. preapare, read, write
        char temp2[] = new char[1024];
        int len2 = -1;
        len2 = fr.read(temp2);    // read
        fw.write("asdfasdfasdf"); // write
        // 4. close file
        fr.close();
        fw.close();
        
    /* -- add buffer --*/
        // 2. choose stream
        /*-- BufferInputStream, BufferOutputStream --*/
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(src));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desc));
        // 3. prepare & read / write
        byte[] temp3 = new byte[1024]; 
        int len3 = -1; 
        len3 = bis.read(temp3);    // read
        bos.write(temp3);        // write
        // 4. close file    
        bis.close(); 
        bos.close();

        // 2. choose stream
        /*-- BufferedReader, BufferedWriter --*/
        BufferedReader br = new BufferedReader(new FileReader(src));
        BufferedWriter bw = new BufferedWriter(new FileWriter(desc));
        // 3. preapare, read, write
        char temp4[] = new char[1024];
        int len4 = -1;
        len4 = br.read(temp4);    // read
        bw.write("asdfasdfasdf"); // write
        // 4. close file
        br.close();
        bw.close();
    
    /* -- non file, maybe from memory -- */
        // String(memory) -> ByteArrayInputStream(memory) -> ByteArrayOutputStream(memory) -> byte[] array(memory) -> 输出屏幕.
        // 1. source
        String sourceMemory = "xyzabcdefg";
        byte[] src5 = sourceMemory.getBytes();    // from memory
        // 2. choose stream
        ByteArrayInputStream bais = new ByteArrayInputStream(src5);
        // baos 本身就是一个存储, 存储在内存中, 所以, baos.write 是写入到内存中的 baos 区域了.
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 3. prepare, read, write, 需要逐个字节读取
        int len5 = -1;
        byte[] destMemory;
        while (null != bais &&
            (len5 = bais.read()) != -1) {
            System.out.println((char)len5);
            baos.write(len5);    // baos 对应的内存中就保存了这一串字符串
        }
        baos.flush();    // 相关的 内存中的 buffer 被清空
        destMemory = baos.toByteArray();    // 将 baos 内存区域中存储的内容输出到字节数组
        for (int i = 0; i < destMemory.length; i++) {
            System.out.println((char)destMemory[i]);
        }
        // 4. 无需close file, 因为本次没有文件操作.
        
    /* convert 字节 -> 字符 */
        //1. source is web 字节流
        //2. choose stream
        BufferedReader cbr = new BufferedReader(
            new InputStreamReader(
                new URL("http://www.baidu.com").openStream(), "UTF-8"));
        BufferedWriter cbw = new BufferedWriter(new FileWriter(desc));
        // 3. preapare, read, write
        char temp6[] = new char[1024];
        int len6 = -1;
        len6 = cbr.read(temp6);    // read
        cbw.write(temp6); // write
        // 4. close file
        cbr.close();
        cbw.close(); 
        
    /* convert 字符 -> 字节 */
        //1. source, 字符流
        String msg = "abcdefghigk";
        //2. choose stream
        BufferedWriter xbw = new BufferedWriter(
            new OutputStreamWriter(
                new FileOutputStream(desc), "UTF8"));
        //3. prepare, read, write
        xbw.write(msg);
        //4. close
        xbw.close();
        
    /* simulate network transfer DataInputStream, DataOutputStream*/
        //1. source, 按照data的格式
        //2. choose stream
        //3. 模拟发送
        DataOutputStream dos = new DataOutputStream(baos);    //baos simulate memory;
        dos.writeInt(18);
        dos.writeBoolean(false);
        dos.flush();
        //4.模拟接收
        byte[] datas = baos.toByteArray();
        DataInputStream dis = new DataInputStream(new ByteArrayInputStream(datas));
        int age = dis.readInt();
        boolean flag = dis.readBoolean();
        System.out.println("--" + age + "--" + flag);
    /* 序列化:对象->字节流, 反序列化: 字节流->对象 */
        //1.source
        Employee emp = new Employee("X man", 100.00);
        //2.choose steam
        // 将对象写入该文件
        ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(desc)));
        oos.writeObject(emp);
        oos.flush();
        //3. 从该文件读取对象
        ObjectInputStream ois = new ObjectInputStream(
                                    new BufferedInputStream(
                                        new FileInputStream(desc)));
        Object newObj = ois.readObject();
        if (newObj instanceof Employee) {
            Employee empTwins = (Employee)newObj;
            System.out.println(empTwins);
        }
    }
    
}

// 只有实现 Serializable 接口才能被序列化
class Employee implements Serializable {
    private String name;
    private double score;
    public Employee() {}
    public Employee(String name, double score) {
        super();
        this.name = name;
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    @Override
    public String toString() {
        return "Employee [name=" + name + ", score=" + score + "]";
    }
    
    
    
}

 

标签:java,read,review,write,io,import,new
来源: https://www.cnblogs.com/moveofgod/p/12968930.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有