热门标签 | 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修饰的也不能被序列化;


推荐阅读
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
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社区 版权所有