使用ObjectInputStream和ObjectOutputStream注意问题

1、对象序列化,类实现Serializable接口

不需要序列化的属性,使用transient声明

2、使用套接字流在主机之间传递对象注意问题:

学习自:Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序

ObjectInputStream与ObjectOutputStream的顺序问题

在网络通讯中,主机与客户端若使用ObjectInputStream与ObjectOutputStream建立对象通讯,必须注重声明此两个对象的顺序。
如:
主机端先建立ObjectInputStream后建立ObjectOutputStream,则对应地客户端要先建立ObjectOutputStream后建立ObjectInputStream,否则会造成两方互相等待数据而导致死锁。
原因是建立ObjectInputStream对象是需要先接收一定的header数据,接收到这些数据之前会处于阻塞状态。

public ObjectInputStream(InputStream in) throws IOException的官方API显示:Creates an ObjectInputStream that reads from the specified InputStream. A serialization stream header is read from the stream and verified. This constructor will block until the corresponding ObjectOutputStream has written and flushed the header.

在创建ObjectInputStream对象时会检查ObjectOutputStream所传过来了头信息,如果没有信息将一直会阻塞

时间: 2024-10-13 14:39:30

使用ObjectInputStream和ObjectOutputStream注意问题的相关文章

对象流: ObjectInputStream 和 ObjectOutputStream

/* * 1.对象流: ObjectInputStream 和 ObjectOutputStream 一对. * 1) ObjectInputStream 对象的字节输入流类, ObjectOutputStream对象的字节输出流类. * 2) 功能: 实现对象的输入/输出. (存储到文件中的是对象,从相应的文件中读取的还是对象) * 3) 注意: 对象流属于处理流,因此,使用时必须将它套接在节点流上. * * 4) 要实现对象的存盘和读取必须具备什么条件? * a) 对象对应的类必须实现一个接

serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法

ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Serializable其实是一个空接口 package java.io; public interface Serializable { } Serializable是一个空接口,没有什么具体内容,它的目的只是简单的标识一个类的对象可以被序列化. 什么情况下需要序列化 a)当你想把的内存中的对象写入到硬

深度克隆:ObjectInputStream、ObjectOutputStream和ByteArrayOutputStream

下面一段深度克隆的源码,不甚理解,查查记录下来 bout = new ByteArrayOutputStream(); ObjectOutputStream oos = null; ObjectInputStream ois = null; oos = new ObjectOutputStream(bout); oos.writeObject(oldValue); //将指定的对象写入 ObjectOutputStream ByteArrayInputStream bin = new ByteA

Java IO: 序列化与ObjectInputStream、ObjectOutputStream

作者:Jakob Jenkov  译者: 李璟([email protected]) 本小节会简要概括Java IO中的序列化以及涉及到的流,主要包括ObjectInputStream和ObjectOutputStream. Serializable 原文链接 如果你希望类能够序列化和反序列化,必须实现Serializable接口,就像所展示的ObjectInputStream和ObjectOutputStream例子一样. 对象序列化本身就是一个主题.Java IO系列教程主要关注流.read

javaIO中的对象流ObjectInputStream与ObjectOutputStream

ObjectInputStream与ObjectOutputStream可以将对象写在硬盘或者从硬盘中读取出来,当然也可以在网络中传输的时候.但是操作的对象必须实现序列化. 什么是对象的序列化?对象序列化的目标就是将对象保存在磁盘上,或者允许在网络中传输对象. api中描述如下 api中的描述如下 一个实现了序列化的对象 package cn.bean.demo.io.object; import java.io.Serializable; //如果这个对象拥有一个实例属性[并且这个实例的对象是

java io系列05之 ObjectInputStream 和 ObjectOutputStream

本章,我们学习ObjectInputStream 和 ObjectOutputStream ObjectInputStream 和 ObjectOutputStream 介绍 ObjectInputStream 和 ObjectOutputStream 的作用是,对基本数据和对象进行序列化操作支持.创 建“文件输出流”对应的ObjectOutputStream对象,该ObjectOutputStream对象能提供对“基本数据或对象”的持久存储: 当我们需要读取这些存储的“基本数据或对象”时,可以

Java之IO(七)ObjectInputStream和ObjectOutputStream

转载请注明源出处:http://www.cnblogs.com/lighten/p/7003536.html 1.前言 本章介绍Java字节流中重要的成员,对象流ObjectInputStream和ObjectOutputStream.之前的DataInputStream和DataOutputStream只是对一些基本数据类型进行了解析和储存,但是在Java中更常见的是一个对象实例,一个对象实例是十分复杂的,如何保存一个对象呢?这个就是对象流的作用了.对象流最终是要有归属地的,通常也就是文件流.

ObjectInputStream与ObjectOutputStream类实现对象的存取

1. ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 2. Serializable是个对象序列化接口,只有序列化才能实现对象存取 3. //定义学生类 package job; import java.io.Serializable;import java.util.Set; public class Student implements Seria

IO操作之ObjectInputStream与ObjectOutputStream

之前写过DataInputStream和DataOutputStream,使用这两个类可以对java基本数据类型进行序列化和反序列化. 本篇再来两个新东西:ObjectInputStream,ObjectOutputStream,这二位不但能对java基本数据类型进行操作,还可以直接干对象,使用起来也更方便.不过,值得注意的是,被干的对象需要实现Serializable接口. 请看下面两个示例 public class Student implements Serializable { priv