java io 读取多个对象_Java IO系列(五):读写对象ObjectOutputStream和ObjectInputStream详解...

有必要多看几遍的

fff6c98081bf8904098fb5e1bd59ff4b.gif

关于字符和字节,例如文本文件,XML这些都是用字符流来读取和写入。而如RAR,EXE文件,图片等非文本,则用字节流来读取和写入。

读写对象,传输对象在Java中很常使用,在javaBean中就经常用到。一般来说,对象要能被对写,自身要实现特定的接口,Serializable或Externalizable接口。

实现Serializable接口对象的读写

实现了Serializable的对象,会被全序列化,当我们在进行序列化时,一般对象中存在我们不需要序列化的数据。但Serializable会全序列化,影响效率,一般来说,可能并不是最好的选择。

class Person implements Serializable{

private int age;

private String name;

public Person(int age, String name){

this.age = age;

this.name = name;

}

@Override

public String toString(){

return "[age:" + age + ",name:" + name + "]";

}

}

public class TestObject {

public static void main(String[] args) throws IOException, ClassNotFoundException {

String path = "F:/io/person.txt";

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(path));

out.writeObject(new Person(20, "nick"));

out.writeObject(new Person(21, "liu"));

out.writeObject(new Person(22, "mike"));

out.close();

ObjectInputStream in = new ObjectInputStream(new FileInputStream(path));

for (int i = 0; i < 3; i++) {

System.out.println(in.readObject());

}

in.close();

}

}

结果为:

[age:20,name:nick]

[age:21,name:liu]

[age:22,name:mike]

transient使实现Serializable对象不全序列化

transient是一个关键字,配合Serializable使用,表示该数据不需要序列化。

class Person implements Serializable{

private int age;

private transient String name;//注意这里使用了transient

public Person(int age, String name){

this.age = age;

this.name = name;

}

@Override

public String toString(){

return "[age:" + age + ",name:" + name + "]";

}

}

public class TestObject {

public static void main(String[] args) throws IOException, ClassNotFoundException {

String path = "F:/io/person.txt";

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(path));

out.writeObject(new Person(20, "nick"));

out.writeObject(new Person(21, "liu"));

out.writeObject(new Person(22, "mike"));

out.close();

ObjectInputStream in = new ObjectInputStream(new FileInputStream(path));

for (int i = 0; i < 3; i++) {

System.out.println(in.readObject());

}

in.close();

}

}

结果为:

[age:20,name:null]

[age:21,name:null]

[age:22,name:null]

可见,name确实没有被序列化

实现Externalizable接口对象的局部数据读写

实现Externalizable,则必须实现writeExternal(ObjectOutput out)和readExternal(ObjectInput in)这两个方法,而这两个方法正是关键。

对于Serializable对象,对象不会调用它的构造器。但是Externalizable对象会调用它所有的默认构造器。而我们一般对对象初始化,不是在默认的构造器,这样的话,对象中的数据都没有初始化。

所以我们要在writeExternal中,写我们需要的数据,在readExternal中取我们需要的数据。

class Person implements Externalizable{

private int age;

private String name;

private String address;

public Person(){

}

public Person(int age, String name, String address){

this.age = age;

this.name = name;

this.address = address;

}

@Override

public void writeExternal(ObjectOutput out) throws IOException {

out.writeInt(age);

out.writeObject(name);

}

@Override

public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {

age = in.readInt();

name = (String) in.readObject();

}

@Override

public String toString(){

return "[age:" + age + ",name:" + name + ",address:" + address + "]";

}

}

public class TestObject {

public static void main(String[] args) throws IOException, ClassNotFoundException {

String path = "F:/io/person.txt";

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(path));

out.writeObject(new Person(20, "nick", "beijing"));

out.writeObject(new Person(21, "liu", "guangzhou"));

out.writeObject(new Person(22, "mike", "shanghai"));

out.close();

ObjectInputStream in = new ObjectInputStream(new FileInputStream(path));

for (int i = 0; i < 3; i++) {

System.out.println((Person) in.readObject());

}

in.close();

}

}

结果为:

[age:20,name:nick,address:null]

[age:21,name:liu,address:null]

[age:22,name:mike,address:null]

可见,在writeExternal中,并没有写入address,因为我不需要它。所以我只读取到age和name。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dotnet Core多版本API共存的优雅实现

API升级&#xff0c;新旧版本的API共存&#xff0c;怎么管理呢&#xff1f;一、前言最近&#xff0c;单位APP做了升级&#xff0c;同步的&#xff0c;API也做了升级。升级过程中&#xff0c;出现了一点问题&#xff1a;API升级后&#xff0c;旧API也需要保留&#xff0c;因为有…

java 文件监听器_java7 文件监听器

java7中的文件监听&#xff0c;主要可以监听指定目录下的文件&#xff1a;新建 删除 修改等操作。StandardWatchEventKinds.ENTRY_MODIFY,StandardWatchEventKinds.ENTRY_CREATE,StandardWatchEventKinds.ENTRY_DELETE 这三个事件 被注册到watchService 对象中&#xff0c;之后…

Beetlex之websocket/tls服务压测工具

为了方便压力测试ws服务&#xff0c;Beetlex同样提供相关工具来对ws/wss服务的性能进行测试测试。安装可以访问https://github.com/beetlex-io/TCPBenchmarks 下载最新版本工作&#xff0c;工具可以运行在linux和windows系统&#xff0c;安装完成后通过浏览器访问相关服务进行操…

php判断数组下标,php判断json或者数组格式与给定格式是否一致

开发的时候碰到个问题&#xff0c;我们技术人员规定了录数据的格式&#xff0c;例如&#xff1a;我们的json模板如下&#xff1a;{"sentence":"Martin and Kelvin went to Chengduon holiday. They are ordering in a rest aurant now but cannot read the char…

php 设置excel格式,php 操作excel文件的方法小结

用php生成excel文件的方法&#xff0c;单独就是用的php,注意一下数据的输入方法即可。一、php&#xff0c;不用COM&#xff0c;生成excel文件header("Content-type:application/vnd.ms-excel");header("Content-Disposition:filenametest.xls");echo "…

大学班里80%都去培训班,为什么我没去

背景大四刚开始&#xff0c;各大培训机构就开始到各大高校开始宣传&#xff0c;我们学校也不例外&#xff1b;当时信息与计算科学这专业在我们学校并不景气&#xff0c;有好几次听说&#xff1a;如果我们那届的就职率还不行的话&#xff0c;那很大可能将此专业拿掉&#xff1b;…

织梦手机版list.php,解决织梦一级目录作域名list.php无法跳转到手机站的问题

最近测试了www.doweb8.com/m/list.php?tid1 在手机站访问的时候&#xff0c;无法跳转到手机的模板&#xff0c;终于找到了解决了方法&#xff0c;给大家分享一下修改根目录下的m/list.php文件重新弄的代码&#xff0c; 不区分几级目录&#xff0c;理论是根据你指定的PC&#…

如何在 C# 中使用 Buffer

缓冲区 是内存中的一组字节序列&#xff0c;缓冲 是用来处理落在内存中的数据&#xff0c;.NET 缓冲 指的是处理 非托管内存 中的数据&#xff0c;用 byte[] 来表示。当你想把数据写入到内存或者你想处理非托管内存中的数据&#xff0c;可以使用 .NET 提供的 System.Buffer类&a…

php强制对齐,[强迫症福利] 使用 PHPStorm 对齐数组的键值对

用 php-cs-fixer 自动格式化&#xff0c;一个配置配合 Git 自动格式化&#xff0c;补充楼上。示例 Git Hook忽略前端的代码格式化&#xff0c;修改一下就可以用。#!/bin/bash## check PHP code syntax error and standard with phpcs# https://blog.csdn.net/xsgnzb/article/de…

.NET SDK-Style 项目(Core、Standard、.NET5)中的版本号

.NET SDK-Style 项目&#xff08;Core、Standard、.NET5&#xff09;中的版本号独立观察员 2020 年 12 月 24 日之前 .NET Framework 时&#xff0c;项目版本号等信息是存储在 AssemblyInfo.cs 文件中&#xff0c;通过程序集特性进行设置&#xff1a;.NET Core 之后&#xff0c…

ajax php 动态,jQuery+PHP+Ajax实现动态数字统计展示功能

jQueryPHPAjax实现的一款动态数字统计展示实例&#xff0c;本例是在页面上动态展示了当前在线用户数&#xff0c;当然了&#xff0c;你可以应用到其他更多场景中。首先我们在#number放置要统计的数字&#xff1a;当前在线&#xff1a;然后我们要定义一个动画过程&#xff0c;使…

[Stardust]星尘分布式全链路监控

随着业务的发展&#xff0c;微服务系统会变得越来越大&#xff0c;各个服务之间的调用关系也会日趋复杂。一个WebApi请求&#xff0c;后方可能经历多个微服务以及数据库和MQ操作&#xff0c;在这个调用过程中&#xff0c;可能因为某一个服务节点出现延迟或者失败&#xff0c;而…

php去掉查询返回的字段序列,php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回...

array_slice()定义和用法array_slice() 函数在数组中根据条件取出一段值&#xff0c;并返回。注释&#xff1a;如果数组有字符串键&#xff0c;所返回的数组将保留键名。(参见例子 4)语法array_slice(array,offset,length,preserve)参数 描述array 必需。规定输入的数组。offse…

如何在 C# 中使用 const,readonly,static

平时在开发时经常会用到 const,readonly,static 关键字&#xff0c;可以肯定这些关键词是完全不同的概念&#xff0c;但有时候他们在用法上很相似以至于在场景中不知道选择哪一个&#xff0c;这篇文章我们就来讨论 C# 中的 const&#xff0c;static 和 readonly 关键词&#xf…

php html asp .net iis tomcat,iis+apache+tomcat 整合共享80口 支持ASP .NET JSP PHP全能WEB服务...

文件目录说明&#xff1a;[apache-tomcat-6.0.37-windows-x86] tomcat 安装版与解压版文件[httpd-2.2] apache安装文件[java] jdk与jre安装文件[mysql] mysql与mysql-tool安装文件[php-5.2.14-Win32] php解压文件[tomcat-connectors-1.2.14-isapi-iis-6.0] isapi模块安装文件[t…

2020,你收获了什么?又失去了什么?

这是头哥侃码的第228篇原创今天是圣诞节&#xff0c;既魔幻又真实的2020年&#xff0c;还有6天就要结束了。每年的年末&#xff0c;我都习惯在下班途中&#xff0c;把头靠在地铁车厢两侧的扶手上&#xff0c;闭上眼睛开始思考自己过去一年的收获与得失&#xff0c;并把这些思绪…

2019龙少php泛站群,龙少php泛站群|PHP版站群 全自动泛解析站群程序 赠送教程

首先将准备建站的域名设置泛解析如baidu.com泛解析为 添加A记录为 *.baidu.com然后在iis里添加空头主机不能设置 汉字目录keywords.txt 关键字&#xff0c;一行一个domain.txt 域名&#xff0c;一行一个&#xff0c;*代表随机muban.html 模板文件&#xff0c;可以修改缓存在dat…

轻量级消息队列RedisQueue

消息队列&#xff08;Message Queue&#xff09;是分布式系统必不可少的中间件&#xff0c;大部分消息队列产品&#xff08;如RocketMQ/RabbitMQ/Kafka等&#xff09;要求团队有比较强的技术实力&#xff0c;不适用于中小团队&#xff0c;并且对.NET技术的支持力度不够。而Redi…

php下载文件代码 数据库,PHP备份数据库生成SQL文件并下载的函数代码

. 代码如下:/****** 备份数据库结构 ******//*函数名称&#xff1a;table2sql()函数功能&#xff1a;把表的结构转换成为SQL函数参数&#xff1a;$table: 要进行提取的表名返 回 值&#xff1a;返回提取后的结果&#xff0c;SQL集合函数作者&#xff1a;heiyeluren*/function t…

生态和能力是国内自研操作系统发展的关键

“缺芯少魂”一直是我国信息产业短板&#xff0c;如果无法实现国产化替代&#xff0c;信息安全和产业安全就犹如沙滩上盖房子&#xff0c;上层再坚固&#xff0c;地基不稳&#xff0c;一遇到风吹草动就有可能全部垮掉。近年来&#xff0c;国内自研操作系统厂商动作频频&#xf…