热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JAVA中的IO流的那些事基本数据操作流,序列化和反序列化

各种各样的数据流—学完你懵不懵?-------------基本数据操作流—Data。。importjava.io.*;publicclassTest{publicst

各种各样的数据流—学完你懵不懵?-------------

基本数据操作流—Data。。


import java.io.*;public class Test {public static void main(String[] args) throws IOException {File file= new File("D:/Demo.txt");OutputStream ops= new FileOutputStream(file);DataOutputStream dos=new DataOutputStream(ops);dos.writeBoolean(false);dos.writeUTF("今天");dos.writeDouble(10.25);dos.writeByte(100);dos.close();}
}

在这里插入图片描述
这写入了些啥?
看不懂—乱码,因为是给机器看的,想要读取数据需要用到DataIntputStream


import java.io.*;public class Test {public static void main(String[] args) throws IOException {File file= new File("D:/Demo.txt");InputStream is= new FileInputStream(file);DataInputStream dis= new DataInputStream(is);//按照顺序读取System.out.println(dis.readBoolean());System.out.println(dis.readUTF());System.out.println(dis.readDouble());System.out.println(dis.readByte());
dis.close();}
}

在这里插入图片描述

public class DataOutputStream extends FilterOutputStream implements DataOutput {
public class DataInputStream extends FilterInputStream implements DataInput {
DataIntput 接口用于将数据从一系列字节转换为 Java 基本类型,并将这些字节读取为二进制流。
DataOutput 接口用于将数据从任意 Java 基本类型转换为一系列字节,并将这些字节写入二进制流。同时还提供了一个将 String 转换成 UTF-8 修改版格式并写入所得到的系列字节的工具。

对于此接口中写入字节的所有方法,如果由于某种原因无法写入某个字节,则抛出 IOException。

对象序列化----


import java.io.*;public class Test {public static void main(String[] args) throws IOException {File file= new File("D:/Hello.txt");//目标文件OutputStream is= new FileOutputStream(file);//开辟输出流ObjectOutputStream oos= new ObjectOutputStream(is);//序列化oos.writeObject(new String("我的老家,就住在这个屯"));oos.close();}
}

在这里插入图片描述

生成的文件看不懂,再写一个程序读取就可以了;

package HuiXin;import java.io.*;public class Test01 {public static void main(String[] args) throws IOException, ClassNotFoundException {File file= new File("D:/Hello.txt");InputStream is= new FileInputStream(file);ObjectInputStream ois= new ObjectInputStream(is);String per = (String) (ois.readObject());System.out.println(per);ois.close();}
}

在这里插入图片描述
在这里插入图片描述

自定义类序列化—要实现Serializable接口

import java.io.*;class Person implements Serializable {private static final long serialVersionUID = 1L;String name;int age;String gender;public Person(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}
}public class Test {public static void main(String[] args) throws IOException {File file= new File("D:/Hello.txt");//目标文件OutputStream is= new FileOutputStream(file);//开辟输出流ObjectOutputStream oos= new ObjectOutputStream(is);//序列化oos.writeObject(new Person("孙悟空",18,"男"));oos.close();}
}

在这里插入图片描述
接下来反序列化–


import java.io.*;public class Test01 {public static void main(String[] args) throws IOException, ClassNotFoundException {File file= new File("D:/Hello.txt");InputStream is= new FileInputStream(file);ObjectInputStream ois= new ObjectInputStream(is);Person per = (Person) (ois.readObject());System.out.println(per);ois.close();}
}

在这里插入图片描述


import java.io.*;class Person implements Serializable {private static final long serialVersionUID = 792646246687698667L;transient String name;static int age;String gender;public String getName() {return name;}public void setName(String name) {this.name = name;}public Person(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}
}public class Test {public static void main(String[] args) throws IOException {File file= new File("D:/Hello.txt");//目标文件OutputStream is= new FileOutputStream(file);//开辟输出流ObjectOutputStream oos= new ObjectOutputStream(is);//序列化oos.writeObject(new Person("孙悟空",18,"男"));oos.close();}
}


import java.io.*;public class Test01 {public static void main(String[] args) throws IOException, ClassNotFoundException {File file= new File("D:/Hello.txt");InputStream is= new FileInputStream(file);ObjectInputStream ois= new ObjectInputStream(is);Person per = (Person) (ois.readObject());System.out.println(per);ois.close();}
}

在这里插入图片描述

总结—
自定义数据序列化的时候必须要类中所有属性都要能够序列化;
静态属性—static的数据不能被序列化;
transenit修饰的也不能被序列化;


推荐阅读
author-avatar
卢军好2602912493
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有