java中什么是对象流_java 对象流

对象流

ObjectInputStream ObjectOutputStream类分别是InputStream和OutputStream的子类,对象输出流使用writeObject(Object obj)方法,将一个对象obj写入到一个文件,使用readObject()读取一个对象。

构造方法:

ObjectInputStream (InputStream in)

ObjectOutputStream(OutputStream out)

当准备将一个对象写入文件的时候,首先用OutputStream的子类创建一个输出流。

OutputStream outStream = new FileOutputStream("file_name");

ObjectOutputStream objstream = new ObjectOutputStream(outStream);

当使用对象流写入或者读取对象的时候,必须保证该对象是序列化的,这样是为了保证对象能够正确的写入文件,并能够把对象正确的读回程序。

所谓的对象的序列化就是将对象转换成二进制数据流的一种实现手段,通过将对象序列化,可以方便的实现对象的传输及保存。在Java中提供了ObejctInputStream 和ObjectOutputStream这两个类用于序列化对象的操作。用于存储和读取对象的输入输出流类,要想实现对象的序列化需要实现Serializable接口,但是Serializable接口中没有定义任何的方法,仅仅被用作一种标记,以被编译器作特殊处理。

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 package project;

2 import java.io.*;

3 //实现Serializable 接口

4 class TV implements Serializable{

5 /**

6 *

7 */

8 private static final long serialVersionUID = 1597309922188243103L;

9 String name;

10 int price;

11 public void setName(String name){

12 this.name = name;

13 }

14 public void setPrice(int price){

15 this.price = price;

16 }

17 public String getName() {

18 return name;

19 }

20 public int getPrice() {

21 return price;

22 }

23

24 }

25 public class Main{

26 public static void main(String[] args) {

27 TV changhongTv = new TV();

28 changhongTv.setName("长虹电视");

29 changhongTv.setPrice(5678);

30 File file = new File("changhong");

31 try {

32 //序列化写入文件

33 OutputStream outputStream = new FileOutputStream(file);

34 ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);

35 objectOutputStream.writeObject(changhongTv);

36 objectOutputStream.close();

37

38 //序列化读取对象

39 InputStream inputStream = new FileInputStream(file);

40 ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);

41 TV xinfeiTv = (TV)objectInputStream.readObject();

42 objectInputStream.close();

43

44

45 xinfeiTv.setName("新飞电视");

46 xinfeiTv.setPrice(6666);

47

48 System.out.println("changhong name "+changhongTv.getName());

49 System.out.println("changhong price "+changhongTv.getPrice());

50

51 System.out.println("xinfei name "+xinfeiTv.getName());

52 System.out.println("xinfei price "+xinfeiTv.getPrice());

53

54 } catch (ClassNotFoundException e) {

55 // TODO: handle exception

56 System.out.println("不能读取对象");

57 }catch (IOException e) {

58 // TODO: handle exception

59 System.out.println(e);

60 }

61 }

62 }

48304ba5e6f9fe08f3fa1abda7d326ab.png

对象的序列化的实现方便了对象间的克隆,使得复制品实体的变化不会引起原对象实体的变化。

下面是一个实例:

另外,Java.awt包中的Componet类是实现Serializable接口的类,因此程序可以实现把组件写入输出流,然后用输入流读取该组件的克隆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值