IO流学习笔记

知识点1:IO流

			字节流                            字符流
输入流		InputStream						   Reader
输出流		OutputStream                       Writer


文件流:FileInputStream,FileReader,FileOutputStream,FileWriter
缓冲流:BufferedInputStream,BufferedReader(String readLine()),BufferedOutputStream,BufferedWriter(void newLine())

对象序列化 : 把对象的GC中的数据写入到输出流....
反序列化 : 把输入流中的二进制数据还原成对象..


 对象的获取 :
      1) new
      2) 工厂方法
      3) 反序列化
      4) 反射

 常用的流 :
      FileInputStream , FileOutputStream => 处理二进制文件
      BufferedReader, BufferedWriter => 处理文本
      InputStreamReader, OutputStreamWriter => 处理文本
      ObjectInputStream, ObjectOutputStream => 处理地二进制

class Student implements Serializable {

    public static int no = 200; // 静态属性不会被序列化

    private int id;
    private String name;
    private int grade;
    private transient double score; // 此属性不会被序列化

    public Student() {}

    public Student(int id, String name, int grade, double score) {
        this.id = id;
        this.name = name;
        this.grade = grade;
        this.score = score;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", grade=" + grade +
                ", score=" + score +
                '}';
    }
}

public class IOTest {

    public static void main(String[] args) {
        System.out.println("hello"); // System.out是打印流, 对应的是屏幕
        //System.out.flush();
        System.err.println("world"); // 错误流使用另外的线程打印

        // 从键盘获取几行字符串, 把它们写入文件keyboard_gbk.txt文件中. 直到输入"quit"命令.
        InputStream is = System.in;
        InputStreamReader isr = null;
        BufferedReader bufferedReader = null;
        try {
            isr = new InputStreamReader(is);
            bufferedReader = new BufferedReader(isr);

            String line;
            while ((line = bufferedReader.readLine()) != null) {
                if (line.equals("exit")) {
                    break;
                }
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void testFileWriter() {
        //FileWriter fileWriter = null; //
        FileOutputStream fos = null;
        OutputStreamWriter osw = null;
        BufferedWriter bufferedWriter = null;

        try {
            //fileWriter = new FileWriter("一个文件.txt");
            fos = new FileOutputStream(new File("一个文件.txt"), true); // 如果要以追加的方式写文件, 第2个参数传入true
            osw = new OutputStreamWriter(fos, "gbk"); // 在转换流的构造器, 指定编码方式
            bufferedWriter = new BufferedWriter(osw);

            bufferedWriter.write("我是一个字符串1");
            bufferedWriter.newLine();
            bufferedWriter.write("我是一个字符串2");
            bufferedWriter.newLine();
            bufferedWriter.write("我是一个字符串3");
            bufferedWriter.newLine();
            bufferedWriter.write("我是一个字符串4");
            bufferedWriter.newLine();
            bufferedWriter.write("我是一个字符串5");
            bufferedWriter.newLine();

            bufferedWriter.flush(); // 强行把缓冲区中的数据刷入硬盘.
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bufferedWriter != null) {
                try {
                    bufferedWriter.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void testFileReader() {
        //FileReader fileReader = null; // FileReader只能处理项目默认的.
        FileInputStream fis = null;
        InputStreamReader isr = null;
        BufferedReader bufferedReader = null;
        try {
            //fileReader = new FileReader("HashMap2.java");
            fis = new FileInputStream("HashMap2.java");
            isr = new InputStreamReader(fis, "gbk"); // 在处理字节数据时, 以gbk编码方式解码字符串
            bufferedReader = new BufferedReader(isr);
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void test6() {
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        ObjectInputStream ois = null;
        try {
            fis = new FileInputStream("对象序列化");
            bis = new BufferedInputStream(fis);
            ois = new ObjectInputStream(bis);

            /*
            System.out.println(ois.readObject());
            System.out.println(ois.readObject());
            System.out.println(ois.readObject());

            System.out.println(Student.no);

             */

            Object o = ois.readObject();
            /*
            Student[] arr = (Student[])o;
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }*/

            System.out.println(o);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void test5() {
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        ObjectOutputStream oos = null;

        try {
            fos = new FileOutputStream("对象序列化");
            bos = new BufferedOutputStream(fos);
            oos = new ObjectOutputStream(bos);

            Student.no = 10000;

            Student s1 = new Student(1, "小明", 5, 80);
            Student s2 = new Student(2, "小我", 4, 50);
            Student s3 = new Student(3, "小刚", 2, 30);

            //oos.writeObject(s1);
            //oos.writeObject(s2);
            //oos.writeObject(s3);

            Student[] arr = {s1, s2, s3};
            //oos.writeObject(arr);

            Set<Student> hashSet = new HashSet();
            hashSet.add(s1);
            hashSet.add(s2);
            hashSet.add(s3);

            oos.writeObject(hashSet);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void test4() throws UnsupportedEncodingException {
        System.out.println((int)'我');
        System.out.println(0x6211);

        System.out.println((char)0x548C);

        System.out.println(0xCED2);

        // 编码 : 字符串 => 字节数组(存文件或进行传输)
        String string = "abc我和你zzz";

        byte[] bytes1 = string.getBytes("utf8"); // 使用项目默认编码方式进行编码
        for (int i = 0; i < bytes1.length; i++) {
            System.out.print(Integer.toHexString(bytes1[i]) + " ");
        }
        System.out.println();

        byte[] bytes2 = string.getBytes("gbk");
        for (int i = 0; i < bytes2.length; i++) {
            System.out.print(Integer.toHexString(bytes2[i]) + " ");
        }
        System.out.println();

        // 解码 : 字节数组 => 字符串
        String string1 = new String(bytes1, "utf8");
        System.out.println(string1);

        String string2 = new String(bytes2, "gbk"); // 指定编码方式进行解码
        System.out.println(string2); // 52946 -> 25105

    }

    // 练习 : 写一个二进制文件, 写入50个100以内的随机int整数, 再写一个程序, 读取这50个随机数,并打印输出.
    @Test
    public void exer2() {
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        ObjectInputStream ois = null;
        try {
            fis = new FileInputStream("50个随机数");
            bis = new BufferedInputStream(fis);
            ois = new ObjectInputStream(bis);

            for (int i = 0; i < 50; i++) {
                System.out.println(ois.readInt());
            }


        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void exer1() {
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        ObjectOutputStream oos = null;

        try {
            fos = new FileOutputStream("50个随机数");
            bos = new BufferedOutputStream(fos);
            oos = new ObjectOutputStream(bos);

            for (int i = 0; i < 50; i++) {
                oos.writeInt((int)(Math.random() * 100));
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void test2() {
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        ObjectInputStream ois = null;
        try {
            fis = new FileInputStream("二进制文件");
            bis = new BufferedInputStream(fis);
            ois = new ObjectInputStream(bis);

            System.out.println(ois.readInt());
            System.out.println(ois.readBoolean());
            System.out.println(ois.readBoolean());
            System.out.println(ois.readLong());
            System.out.println(ois.readDouble());

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void test1() {
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        ObjectOutputStream oos = null;

        try {
            fos = new FileOutputStream("二进制文件");
            bos = new BufferedOutputStream(fos);
            oos = new ObjectOutputStream(bos);

            oos.writeInt(20);
            oos.writeBoolean(true);
            oos.writeBoolean(false);
            oos.writeLong(30);
            oos.writeDouble(3.14);

            oos.writeUTF("abc我和你zzz");
            oos.writeChars("abc我和你zzz");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片微型计算机(MCU)经过多年的发展,在性能上有很大的进步,在型号上发展到上千种类,已经广泛应用于人类社会生活的各个领域。单片机课程已经成为高校计算机、自动化、测控以及电子信息工程等专业的重要课程。该课程是一门理论性和实践性都很强的课程,在实际教学中,应将理论教学和实验教学紧密结合。学生在掌握理论知识之余,必须通过编写程序、设计硬件电路、仿真、调试这一系列的实验过程,才能更好地掌握单片机的结构原理和应用技能。随着单片机及其接口技术的飞速发展,目前市场上供应的编程仿真实验资源并不能完全满足高校单片机课程教与学的需求,构建低成本、技术先进、源码公开的单片机编程仿真实验系统,对我国单片机课程的教学和单片机领域人才的培养具有重要的现实意义。 本论文结合目前教学中对单片机编程仿真实验系统的实际需求,采用模块化结构设计思想,精心设计和开发了单片机编程仿真实验系统。该单片机编程仿真实验系统由PC机端单片机编程控制软件和单片机编程仿真实验板两部分组成。PC机端的单片机编程控制软件可以自动检测到连接到单片机编程仿真实验板上的单片机,控制单片机编程器擦除、写入、读出、校验目标单片机ROM中的程序,以十六进制文件(.HEX文件)格式显示在控制界面内;单片机仿真实验系统能够把写入单片机的程序实时地运行,并呈现实际运行效果。单片机编程控制软件和单片机仿真实验板组成一个完整的单片机编程仿真实验系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值