Qing 10 months ago
parent
commit
d4619bb4cf

BIN
springboot-demo/data/main.bin


+ 1 - 0
springboot-demo/data/nio.txt

@@ -0,0 +1 @@
+Hello NIO

BIN
springboot-demo/data/person.bin


+ 6 - 1
springboot-demo/data/some.txt

@@ -1 +1,6 @@
-987654321
+987654321
+123456789
+
+987654321
+123123
+123456789

+ 22 - 0
springboot-demo/src/main/java/com/sf/javase/io/BufferMain.java

@@ -0,0 +1,22 @@
+package com.sf.javase.io;
+
+import lombok.SneakyThrows;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+public class BufferMain {
+
+    @SneakyThrows
+    public static void main(String[] args) {
+        File file = new File("data/some.txt");
+        byte[] bytes = new byte[(int) file.length()];
+        FileInputStream fileInputStream = new FileInputStream(file);
+        // 传入缓存的大小
+        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream,1024);
+        int size = bufferedInputStream.read(bytes);
+        System.out.println(new String(bytes,0,size));
+        bufferedInputStream.close();
+    }
+}

+ 41 - 0
springboot-demo/src/main/java/com/sf/javase/io/nio/BufferMain.java

@@ -0,0 +1,41 @@
+package com.sf.javase.io.nio;
+
+import java.nio.ByteBuffer;
+
+public class BufferMain {
+
+    public static void main(String[] args) {
+        ByteBuffer buffer = ByteBuffer.allocate(8);
+        // 8 8 0
+        System.out.println("capacity: " + buffer.capacity());
+        System.out.println("limit: " + buffer.limit());
+        System.out.println("position: " + buffer.position());
+
+        System.out.println("=============存入ab");
+        buffer.put("ab".getBytes());
+        // 8 8 2
+        System.out.println("capacity: " + buffer.capacity());
+        System.out.println("limit: " + buffer.limit());
+        System.out.println("position: " + buffer.position());
+
+        // 调用刷新方法
+        // 从写状态变成读状态
+        buffer.flip();
+        // 2 0
+        // 可读区域是2
+        System.out.println("=============调用flip");
+        System.out.println("limit: " + buffer.limit());
+        System.out.println("position: " + buffer.position());
+
+        System.out.println("=============读取数据");
+        System.out.println((char) (buffer.get()));
+        System.out.println("position: " + buffer.position());
+
+        System.out.println("=============清空");
+        buffer.clear();
+        // 重置回起始位置
+        System.out.println("limit: " + buffer.limit());
+        System.out.println("position: " + buffer.position());
+
+    }
+}

+ 31 - 0
springboot-demo/src/main/java/com/sf/javase/io/nio/ChannelMain.java

@@ -0,0 +1,31 @@
+package com.sf.javase.io.nio;
+
+import lombok.SneakyThrows;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+
+public class ChannelMain {
+
+    @SneakyThrows
+    public static void main(String[] args) {
+        File file = new File("data/nio.txt");
+        FileOutputStream fos = new FileOutputStream(file);
+        // 通过stream获取通道
+        FileChannel fileChannel = fos.getChannel();
+        // 还需要获取buffer 通过allocate方法来获取指定大小的缓冲区
+        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
+        String content = "Hello NIO";
+        // 把字符串的字节数组放入缓冲区
+        byteBuffer.put(content.getBytes());
+        // 刷新缓冲区 代表写完成
+        byteBuffer.flip();
+        // 将缓冲区写入通道
+        fileChannel.write(byteBuffer);
+
+        fileChannel.close();
+        fos.close();
+    }
+}

+ 16 - 0
springboot-demo/src/main/java/com/sf/javase/io/serial/Health.java

@@ -0,0 +1,16 @@
+package com.sf.javase.io.serial;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.io.Serializable;
+
+// 健康情况
+@Data
+@AllArgsConstructor
+public class Health implements Serializable {
+
+    private static final long serialVersionUID = 8072122427076627521L;
+
+    private String desc;
+}

+ 63 - 0
springboot-demo/src/main/java/com/sf/javase/io/serial/Person.java

@@ -0,0 +1,63 @@
+package com.sf.javase.io.serial;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.SneakyThrows;
+
+import java.io.*;
+
+// Serializable 可序列化的
+@Data
+@AllArgsConstructor
+public class Person implements Serializable {
+
+    // 生成一个序列化的版本id (序列化编号)
+    // 如果手写,一般写作 1L
+    // 如果生成,会根据当前类的结构,来计算出一个id
+    // 注意点击生成时  鼠标要在类里才有对应显示
+//    private static final long serialVersionUID = 1L;
+//    private static final long serialVersionUID = -8452582517235146125L;
+    // 重新生成id
+    private static final long serialVersionUID = 3409425097949035146L;
+
+    private String name;
+    private long age;
+    // 如果要被序列化的类 还有别的属性是自定义的类型 那么这个类型也需要是可序列化的
+    private Health health;
+
+    @SneakyThrows
+    public static void main(String[] args) {
+//        Health health = new Health("良好");
+//        Person person = new Person("zhangsan", 80, health);
+//        Person person2 = new Person("lisi", 60, health);
+        // bin 是 binary(二进制文件)
+//        FileOutputStream fos = new FileOutputStream("data/person.bin");
+//        ObjectOutputStream oos = new ObjectOutputStream(fos);
+//        // 将对象写入到文件中
+          // 可以一起序列化多个对象
+//        oos.writeObject(health);
+//        oos.writeObject(person);
+//        oos.writeObject(person2);
+
+        // 当使用一个类的版本进行序列化后  Person(int age)
+        // 改变了类的版本Person(long age) 再对原来的文件进行反序列化
+
+        // 反序列化
+        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data/person.bin"));
+        // 当文件中有多个对象时,写入的顺序就是读出的顺序
+        Health health1 = (Health) ois.readObject();
+        Person result1 = (Person) ois.readObject();
+        Person result2 = (Person) ois.readObject();
+        System.out.println(health1);
+        System.out.println(result1);
+        System.out.println(result2);
+
+        // true true
+        // 同一个对象 只会被序列化一次
+//        System.out.println(health1 == result1.getHealth());
+//        System.out.println(health1 == result2.getHealth());
+
+        // java中有几种创建对象的方式
+        // new 、反序列化、 反射
+    }
+}

+ 30 - 0
springboot-demo/src/main/java/com/sf/javase/io/serial/TransientMain.java

@@ -0,0 +1,30 @@
+package com.sf.javase.io.serial;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.SneakyThrows;
+
+import java.io.*;
+
+@Data
+@AllArgsConstructor
+public class TransientMain implements Serializable {
+
+    // transient
+    // 被修饰的变量 不会被序列化 意思是变量的值不会被保存
+    private String str1;
+    private transient String str2;
+
+    @SneakyThrows
+    public static void main(String[] args) {
+        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("data/main.bin"));
+        oos.writeObject(new TransientMain("123", "456"));
+        oos.close();
+
+        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data/main.bin"));
+        TransientMain transientMain = (TransientMain) ois.readObject();
+        System.out.println(transientMain);
+        ois.close();
+    }
+
+}