• I/O 再 review


    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 + "]";
        }
        
        
        
    }
  • 相关阅读:
    [转载]要死的人都后悔些什么
    mysql优化之explain备忘笔记
    memcached 命令操作详解
    linux netstat 命令详解
    linux awk 命令详解
    定时任务FluentScheduler 学习笔记 .net
    webAPI文件上传时文件过大404错误的问题
    用递归形成树结构数据
    webAPP 图片上传
    webAPP踩坑记录
  • 原文地址:https://www.cnblogs.com/moveofgod/p/12968930.html
Copyright © 2020-2023  润新知