`
jsx112
  • 浏览: 318116 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java学习笔记---Java的对象序列化以及文件IO处理

阅读更多

1.对象的序列化就是保存对象的当前状态。

2.保存对象的状态有两种主要的方式: 

1)  对象序列化(将对象写入到文件,以后再反序列化,见后例)

如果保存的数据用于Java程序内交互,则采用对象的序列化;

2)  写入文件(将对象写入到文本文件,注意,是文本文件)

如果保存的数据用于和其他非Java程序交互,则保存到文本文件。

3.对象如果需要序列化,则它所在的类必须要实现Serializable接口。

     如果某类是可序列化的,则它的子类自动地可以序列化。

4.对象序列化的步骤:

1) 创建文件输出流;

2) 创建对象输出流;

3) 写入对象状态;

4) 关闭对象输出流;

 

//1.创建文件输出流  

FileOutputStream fs = new FileOutputStream("OutputFile.file");       

//2.创建对象输出流  

ObjectOutputStream os = new ObjectOutputStream(fs);  
  
//3.写入对象状态  

os.writeObject(characterOne);  

os.writeObject(characterTwo);  

os.writeObject(characterThree);  

//4.关闭对象输出流  

os.close(); 

  

对象写入文件的顺序为:

 

 

其中,ObjectOutputStream是把对象转换成字节流;FileOutputStream是把字节流写入文件。

5.序列化对象会把对象的所有属性保存,被对象的实例变量所引用的对象也会被序列化。

     如果某实例变量不能或不应该被序列化,则把这个变量标记为transient。将属性标记为transient后,对象序列化时会将该属性保存为null值。

6.对象解序列化的步骤:

1) 创建文件输入流;

2) 创建对象输入流;

3) 读出对象状态;

4) 转换对象类型(因为对象读出后为Object类型);

5) 关闭对象输入流;

 

在对象读出到对象输入流后,JVM会尝试查找和加载对象的类,如果不成功则报异常。

7.对象被还原时,静态变量维持类中原本的样子,而不是存储时的样子。

8.将对象状态写入文件的步骤:(使用BufferedWriter)

//先用缓冲区存放数据,然后链接到文件  

BufferedWriter writer = new BufferedWriter(new FileWriter(aFile));  

//写入数据  

writer.write("blabla");  

//关闭  

writer.close(); 

对象写入文件的顺序:

 

  使用缓冲区Writer的原因:如果直接使用FileWriter的话,写硬盘需要好多次,速度较慢(硬盘读写速度远远慢于内存读写速度)。使用了缓冲区Writer就可以先缓冲数据,然后一次性得写到硬盘文件中。

9.将对象从文件读出的步骤:(使用BufferedReader)

     使用缓冲区Writer的原因:如果直接使用FileWriter的话,写硬盘需要好多次,速度较慢(硬盘读写速度远远慢于内存读写速度)。使用了缓冲区Writer就可以先缓冲数据,然后一次性得写到硬盘文件中。

9.将对象从文件读出的步骤:(使用BufferedReader)

//FileReader是字符的连接到文本文件的串流  

FileReader fileReader = new FileReader(new File("File.txt"));  

//使用BufferedReader链接到FileReader,使得接收更有效率  

BufferedReader reader = new BufferedReader(fileReader);    

String line = null;  

//挨行打印出数据  

while((line = reader.readLine())!= null)  

{  

    System.out.println(line);  

} 

 

 

文件读出的过程中,使用BufferedReader去链接FileReader,使得接收更有效率。

---------------------------------------

以下是一个对象序列化,反序列化以及文件IO的例子,以后可以翻阅

class CashCheck implements Serializable

{

	private static final long serialVersionUID = -8872155900725314694L;

	private String cashCheckID;

	private int cashAmout;

	public CashCheck()

	{

	}

	public String getCashCheckID()

	{

		return cashCheckID;

	}

	public void setCashCheckID(String cashCheckID)

	{

		this.cashCheckID = cashCheckID;

	}

	public int getCashAmout()

	{

		return cashAmout;

	}

	public void setCashAmout(int cashAmout)

	{

		this.cashAmout = cashAmout;

	}

}

public class SerializeDemo01

{

	public static void main(String[] args)

	{

		CashCheck check = new CashCheck();

		check.setCashAmout(10000);
		check.setCashCheckID("notifier");

		/*
		 * 
		 * 序列化对象
		 * 
		 */

		try

		{

			// 1.创建文件输出流,负责将字节写入文件

			FileOutputStream fs = new FileOutputStream(

			new File("C:\\Documents and Settings\\Administrator\\桌面\\notifier.file"));

			// 2.创建对象输出流,负责将对象转为字节

			ObjectOutputStream os = new ObjectOutputStream(fs);

			// 3.写入对象

			os.writeObject(check);

			// 4.关闭对象输出流

			os.close();

		} catch (FileNotFoundException e)

		{

			e.printStackTrace();

		} catch (IOException e)

		{

			e.printStackTrace();

		}

		/*
		 * 
		 * 解序列化对象
		 * 
		 */

		try

		{

			// 1.创建文件输入流,负责将文件转为字节

			FileInputStream fi = new FileInputStream("C:\\Documents and Settings\\Administrator\\桌面\\notifier.file");

			// 2.创建对象输入流,负责将字节写入对象

			ObjectInputStream oi = new ObjectInputStream(fi);

			// 3.读出对象

			Object o1 = oi.readObject();

			if (o1 instanceof CashCheck)

			{

				CashCheck check1 = (CashCheck) o1;

				System.out.println(check1.getCashCheckID());

				System.out.println(check1.getCashAmout());

			}

			// 4.关闭对象输入流

			oi.close();

		} catch (FileNotFoundException e)

		{

			e.printStackTrace();

		} catch (IOException e)

		{

			e.printStackTrace();

		} catch (ClassNotFoundException e)

		{

			e.printStackTrace();

		}

		/*
		 * 
		 * 以文件的形式读出序列化文件,是乱码
		 * 
		 */

		try

		{

			FileReader fr = new FileReader(

			new File("C:\\Documents and Settings\\Administrator\\桌面\\notifier.file"));

			BufferedReader br = new BufferedReader(fr);

			String line = null;

			while ((line = br.readLine()) != null)

			{

				System.out.println(line);

			}

		} catch (FileNotFoundException e)

		{

			e.printStackTrace();

		} catch (IOException e)

		{

			e.printStackTrace();

		}

	}

}

 

分享到:
评论

相关推荐

    良葛格 Java 学习笔记-JavaGossip全(v1+v2)

    5. **IO流**:讲解输入输出流的基本概念,包括字节流和字符流,以及缓冲流、转换流、对象序列化等高级话题。 6. **多线程**:讨论并发编程的基础,线程的创建与同步,包括synchronized关键字、wait()、notify()和...

    java学习笔记之Java-IO操作共19页.pdf.zi

    【Java IO操作详解】 在Java编程中,IO(Input/Output)操作是处理数据输入与输出的核心技术。Java-IO操作共19页的笔记详细介绍了这一关键领域,旨在帮助...这19页的学习笔记将是你掌握Java IO操作的重要参考资料。

    IO-黑马程序员Java学习笔记.rar

    "IO-黑马程序员Java学习笔记"这个压缩包包含了关于Java IO的详细教程,可以帮助我们深入理解这个关键领域。下面将根据提供的文件名来解析可能包含的知识点。 1. **IO.md**: 这个文件很可能是Markdown格式的学习...

    java学习笔记markdown

    4. **IO流**:介绍输入/输出流的概念,包括文件操作、字节流、字符流、对象序列化等。这部分内容涉及数据的读写和传输。 5. **网络编程**:讲解Socket编程,如何创建客户端和服务器进行网络通信,以及HTTP、HTTPS...

    Java实用笔记-学点Java挺好的

    8. **反射**:反射机制允许程序在运行时动态获取类的信息并操作对象,是Java强大之处,常用于插件系统、序列化和动态代理。 9. **设计模式**:设计模式是解决常见问题的最佳实践,如单例模式、工厂模式、观察者模式...

    Java学习笔记之IO流

    ### Java学习笔记之IO流 #### 一、IO流概述 在Java中,IO流是用于处理输入输出操作的一种机制,主要包括输入流(Input Stream)和输出流(Output Stream)两大类。通过这些流,我们可以实现对文件的操作,如读取、写入...

    Java学习笔记-个人整理的

    {7.12}对象序列化}{117}{section.7.12} {8}多线程}{121}{chapter.8} {8.1}线程的常用属性与方法}{121}{section.8.1} {8.2}后台线程}{123}{section.8.2} {8.3}创建线程的两种方法}{123}{section.8.3} {8.4}...

    良葛格java学习笔记

    5. **IO流**:阐述了Java I/O流的分类、层次结构以及常用类的用法,包括字符流和字节流、输入流和输出流、缓冲流以及对象序列化。 6. **集合框架**:详述ArrayList、LinkedList、Vector、HashSet、HashMap等集合类...

    林信良java学习笔记

    在IO流方面,书中有详尽的介绍,包括文件操作、字节流、字符流、缓冲流和对象序列化。这些知识使开发者能够有效地处理输入输出,实现数据的读写和传输。 线程和并发处理也是书中的一大亮点。读者将学习到如何创建和...

    JAVA学习笔记

    【JAVA学习笔记】是一份专为Java初学者设计的学习资源,包含了从基础知识到进阶概念的全面讲解。PDF版的格式使得学习者可以方便地在各种设备上阅读和打印,随时随地提升自己的Java技能。 这份笔记可能涵盖了以下几...

    面向对象大胆向前 Java API 实战-Markdown格式的笔记

    笔记会讲解字节流和字符流的区别,以及如何使用缓冲区提高效率,还会涵盖文件流、网络流和对象序列化。 ### 6. 集合框架(8:Java Collections FrameWork-Java API 实战.md) Java集合框架是管理对象的容器,如...

    java io流学习笔记1

    本篇学习笔记主要聚焦于Java IO流的基本概念、分类、使用方法以及在实际开发中的应用。 一、Java IO流简介 Java IO流分为字符流和字节流两大类,它们都继承自抽象基类`java.io.InputStream`和`java.io.OutputStream...

    java学习比记-北大青鸟时做的笔记,每堂课都有

    【Java学习笔记】北大青鸟课程精华解析 Java是一种广泛使用的高级编程语言,以其平台无关性、面向对象的特性以及强大的安全性能而受到广大开发者喜爱。北大青鸟作为知名的IT培训机构,提供了丰富的Java教学资源,这...

    个人笔记--Java_API

    - `writeObject(Object obj)`:序列化对象。 - `readObject()`:反序列化对象。 **4.8 RandomAccessFile** - **特点**:可以随机访问文件的任意位置。 - **构造方法**: - `RandomAccessFile(File file, String...

    java学习笔记整理

    ### Java学习笔记整理 #### 1. Java简介 ##### 1.1 计算机编程和开发语言 计算机系统由硬件系统和软件系统组成。软件系统又进一步细分为系统软件和应用软件。其中,系统软件包括操作系统、编译系统、数据库系统等...

    java学习笔记,全程

    - 文件流与对象序列化:如何将对象写入文件并反序列化恢复。 5. **Java的面向对象编程** - 继承、封装和多态:深入理解面向对象三大特性及其在Java中的体现。 - 抽象类与接口:探讨抽象类和接口的区别与应用场景...

    Java 客户端服务器程序 学习笔记

    Java的`java.io.Serializable`接口和`ObjectOutputStream/ObjectInputStream`可以用于对象的序列化和反序列化。 7. **安全性**:考虑到网络安全,开发者可能还会介绍如何在Java客户端服务器程序中添加加密和身份...

    java学习笔记JDK6

    5. **IO流**:Java的IO系统基于流的概念,提供了多种输入输出流,支持字符和字节流,以及缓冲、转换和对象序列化等功能。 6. **集合框架**:包括List、Set和Map接口,以及它们的实现类如ArrayList、HashSet、...

Global site tag (gtag.js) - Google Analytics