对象流的使用(ObjectInputStream和ObjectOutputStream)

1.在RPC中调用可能会使用对象流的二进制方式来对象的获取和使用

Person对象:

import java.io.Serializable;

public class Person implements Serializable {

	private static final long serialVersionUID = 1L;

	private String name;
	private Long id;

	public Person() {
		super();
	}

	public Person(String name, Long id) {
		super();
		this.name = name;
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", id=" + id + "]";
	}

}

2.对象流的测试:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ObjectInOutputStreamDemo {
	public static void main(String[] args) {
		outObject();
		readObject();
	}

	private static void readObject() {
		FileInputStream in = null;
		ObjectInputStream ois = null;
		try {
			in = new FileInputStream("person.obj");
			ois = new ObjectInputStream(in);
			Person person = (Person)ois.readObject();
			System.out.println(person);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			if (ois != null) {
				try {
					ois.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

	private static void outObject() {
		Person person = new Person("aaa", 10l);
		FileOutputStream out = null;
		ObjectOutputStream oos = null;

		try {
			out = new FileOutputStream("person.obj");
			oos = new ObjectOutputStream(out);
			oos.writeObject(person);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (oos != null) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

		}

	}

}

原文地址:https://www.cnblogs.com/code111/p/9134428.html

时间: 2024-10-05 05:04:44

对象流的使用(ObjectInputStream和ObjectOutputStream)的相关文章

第二十六节(对象流,File类)

对象流可以将 Java 对象转换成二进制写入磁盘,这个过程通常叫做序列化,并且还可 以从磁盘读出完整的 Java 对象,而这个过程叫做反序列化. 对象流主要包括:ObjectInputStream 和 ObjectOutputStream 如何实现序列化和反序列化 如果实现序列化该类必须实现序列化接口 java.io. Serializable , 该接口没有任何方法, 该接口 只是一种标记接口,标记这个类是可以序列化的 /* 对象流: 对象流可以将java对象转换成二进制写入磁盘,这个过程叫做

Java IO: 序列化与ObjectInputStream、ObjectOutputStream

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

Java里的IO流里的 ObjectInputStream 的读取\写入!

各位好!!我又来了!!今天遇见了一个小问题!! IO流里的对象读取总是出错!各种报错!!神烦啊!!百思不得其解啊!然后就上网百度!找了好久终于让我找到了!下面就让我来说一说! 当你用IO流里的对象流写入的时候,ObjectOutputStream会在文件中的开头和结尾进行一个标识AC/DC,ObjectInputStream会严格的根据开头和结尾来进行读取,当读取不到的时候就会进行报错!! ObjectOutputStream无法将上一次的对象的结尾的DC消除,所以千万不要用FileOutPut

使用ObjectInputStream和ObjectOutputStream注意问题

1.对象序列化,类实现Serializable接口 不需要序列化的属性,使用transient声明 2.使用套接字流在主机之间传递对象注意问题: 学习自:Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序 ObjectInputStream与ObjectOutputStream的顺序问题 在网络通讯中,主机与客户端若使用ObjectInputStream与ObjectOutputStream建立对象通讯,必须注重声明此两个对象的顺序

对象流: ObjectInputStream 和 ObjectOutputStream

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

javaIO中的对象流ObjectInputStream与ObjectOutputStream

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

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

Java IO7:管道流、对象流

前言 前面的文章主要讲了文件字符输入流FileWriter.文件字符输出流FileReader.文件字节输出流FileOutputStream.文件字节输入流FileInputStream,这些都是常见的流类.当然除了这些流类之外,Java还提供了很多的流类给用户使用,本文就看一下别的流. 管道流 管道流主要用于连接两个线程的通信.管道流也分为字节流(PipedInputStream.PipedOutputStream)和字符流(PipedReader.PipedWriter).比如一个Pipe

java对象流

当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送.发送方需要把这个Java对象转换为字节序列,才能在网络上传送:接收方则需要把字节序列再恢复为Java对象. 把Java对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为Java对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. java.io.ObjectOutp