-
2021-03-06 03:50:20
Java对象序列化
首先介绍一下对象序列化的目标:对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。
一、序列化的含义和意义:
序列化机制使得对象可以脱离程序的运行而独立存在。
对象的序列化指将一个Java对象写入IO流中,与此对应的反是,对象的反序列化则指从IO流中恢复该Java对象。
如果需要需要让某个对象支持序列化机制,则必须让它的类是可序列化的(serializable)。为了让某个类是可序列化的,该类必须实现如下两个接口之一:
Serializable
Externalizable
Serializable接口是一个标记接口,实现该接口无需实现任何方法,它只是表明该类的实例是可序列化的。
所有需要保存到磁盘里的对象的类都应该可序列化。
二、使用对象流实现序列化(使用Serializable接口)
使用 Serializable 来实现序列化非常简单,主要让目标类实现 Serializable 标记接口即可,无须实现任何方法。
一旦某个类实现了 Serializable 接口,该类的对象就是可序列化的,程序可以通过如下两个步骤来序列化该对象。
1.创建一个 ObjectOutputStream,这个输出流是一个处理流,所以必须建立在其他节点流的基础上。如下代码所示。
//创建 ObjectOutputStream 输出流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("file.txt));
2.调用 ObjectOutputStream 对象的writeObject()方法输出可序列
更多相关内容 -
Java读取txt文件和写入txt文件的简单实例
2020-09-01 07:06:42下面小编就为大家带来一篇Java读取txt文件和写入txt文件的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
Java将对象保存到文件中/从文件中读取对象的方法
2020-09-01 02:17:35下面小编就为大家带来一篇Java将对象保存到文件中/从文件中读取对象的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
Java将对象写入文件读出_序列化与反序列化的实例
2020-08-29 16:44:35下面小编就为大家带来一篇Java将对象写入文件读出_序列化与反序列化的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
java 将对象写入文件进行保存和读取
2021-03-15 01:49:34java可以将序列化以后的对象存入文件中,比如HashMap, 然后还能读出来。对于一些做高速缓存的项目非常有用,比如你从数据库读取了一个分类,希望以后就不要从数据库读取了,从文件读取。那么这种办法非常有用。如果...java可以将序列化以后的对象存入文件中,比如HashMap, 然后还能读出来。对于一些做高速缓存的项目非常有用,比如你从数据库读取了一个分类,希望以后就不要从数据库读取了,从文件读取。那么这种办法非常有用。
如果一个对象没有被序列化,那么无法存入,所以对象必须是序列化的
package com.javaer.examples.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
public class StoreFileObject {
//java serialize a object to file
public static void writeObject(String path,Object map) throws IOException{
File f=new File(path);
FileOutputStream out=new FileOutputStream(f);
ObjectOutputStream objwrite=new ObjectOutputStream(out);
objwrite.writeObject(map);
objwrite.flush();
objwrite.close();
}
// read the object from the file
public static Object readObject(String path) throws IOException, ClassNotFoundException{
FileInputStream in=new FileInputStream(path);
ObjectInputStream objread=new ObjectInputStream(in);
Object map=objread.readObject();
objread.close();
return map;
}
/**
* @param args
*/
public static void main(String[] args) {
HashMap h = new HashMap();
h.put(‘‘name‘‘, ‘‘walter‘‘);
try {
StoreFileObject.writeObject(‘‘/my.db‘‘, h);
} catch (IOException e) {
e.printStackTrace();
}
}
}
首发于
http://java-er.com -
http://java-er.com/blog/java-save-object/
-
Java基础:向txt文档中追加写入多个对象,并读取
2021-03-10 09:51:53import java.io.*;class Person implements Serializable {private static final long serialVersionUID = 1L;private String name;private int age;public Person() {}public Person(String name, int age) {this.n...import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "姓名:" + name + ";年龄:" + age;
}
}
public class Text{
static int geshu = 0;
public static void main(String[] args) throws Exception
{
String path = "d:" + File.separator + "test.txt";
File f = new File(path);
Person p1 = new Person("张三", 23);
write(f, p1);
read(f, geshu);
Person p2 = new Person("李四", 32);
write(f, p2);
read(f, geshu);
}
public static void write(File f, Object p) throws Exception
{
OutputStream out = new FileOutputStream(f, true);
//true表示追加
MyObjectOutputStream oos = MyObjectOutputStream.newInstance(f,
out);
oos.writeObject(p);
geshu++;
oos.close();
System.out.println("-----Oject写入成功....");
}
public static void read(File f, int geshu) throws Exception
{
FileInputStream in = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(in);
for (int i = 0; i < geshu; i++) {
System.out.println((Person) ois.readObject());
}
ois.close();
}
}
new一个ObjectOutputStream的时候,这个ObjectOutputStream的构造方法就会调用writeStreamHeader()方法,
这样流中就会被写入了一些信息,这些信息也会写入到我们的文件中。在第一次写入文件时,这些头部信息是需要的。因为ObjectInputStream读的时候会帮我们过滤掉。但是当我们追加写入一个文件时,这些头部信息也会写入文件中,读取的时候只会把文件第一次出现的头部信息过滤掉,并不会把文件中间的头部信息也过滤掉,所以追加多个对象后,读取对象时会出现问题。
怎么解决呢?
一、不用追加,可以在每次写入的时候把文件中所有对象读出来,再将这些对象和要写入的对象一起重新写入。
二、如果不是第一次写入文件,在写入时去掉头部信息,怎么去掉呢?头部信息是在writeStreamHeader();方法中写入的,所以我们可以通过继承ObjectOutputStream来覆盖这个方法,如果不是第一次写入文件,这个方法什么也不做。
class MyObjectOutputStream extends
ObjectOutputStream {
private static File f;
writeStreamHeader()方法是在ObjectOutputStream的构造方法里调用的
由于覆盖后的writeStreamHeader()方法用到了f。如果直接用构造方法创建
一个MyObjectOutputStream对象,那么writeStreamHeader()中的f是空指针
因为f还没有初始化。所以这里采用单态模式
(将构造方法定义为私有的,然后通过方法获取对象,可以保证某个类只能存在一个对象示例)
public static MyObjectOutputStream newInstance(File file,
OutputStream out)
throws IOException {
f = file;
return new MyObjectOutputStream(out);
}//通过方法初始化f,获取对象。
private MyObjectOutputStream(OutputStream out) throws IOException
{
super(out);//会调用重写的writeStreamHeader()方法
}//不能在类的外部使用new,但在类的内部可以
@Override
protected void writeStreamHeader() throws IOException {
if (!f.exists() || (f.exists() &&
f.length() == 0)) {
super.writeStreamHeader();
} else {
super.reset();
}
}
}
-
Java – 如何将ArrayList对象写入txt文件?
2021-02-13 01:23:03它工作正常,但问题是已添加的对象没有保存在.txt文件中,只保存在临时对象上.所以我需要将它们添加到文本文件中,以便我以后可以显示和删除它们.这是代码的一部分.* /public class testing {public static void main.../ **我有一些方法,如添加,显示,排序,删除和退出实现ArrayList函数.它工作正常,但问题是已添加的对象没有保存在.txt文件中,只保存在临时对象上.所以我需要将它们添加到文本文件中,以便我以后可以显示和删除它们.这是代码的一部分.
* /
public class testing {
public static void main(String[] args) {
String Command;
int index = 0;
Scanner input = new Scanner(System.in);
ArrayList MenuArray = new ArrayList();
boolean out = false;
while (!out) {
System.out.print("Enter your Command: ");
Command = input.nextLine();
// method ADD for adding object
if (Command.startsWith("ADD ") || Command.startsWith("add ")) {
MenuArray.add(Command.substring(4).toLowerCase());
// indexing the object
index++;
/** i stuck here,it won't written into input.txt
BufferedWriter writer = new BufferedWriter(new FileWriter(
"input.txt"));
try {
for (String save : MenuArray) {
int i = 0;
writer.write(++i + ". " + save.toString());
writer.write("\n");
}
} finally {
writer.close();
}*/
} else if (Command.startsWith("EXIT") || Comand.startsWith("exit")) {
out = true;
}
}
}
}
-
如何将java中map数据写入txt文件中
2021-02-26 21:06:18用户提问例如static{//初始化默认用户user.setUsername("admin");...try {FileWriter fw =newFileWriter("D:\\PBNovelplatform\\UserInformation.txt");Map users = new HashMap();users.put(user.getUserna... -
如何用Java将对象写入文件
2020-05-20 20:02:04为此,您必须实现Serializable接口,并使用ObjectOutputStream将对象写入文件。 FileOutputStream fout = new FileOutputStream("c:\\temp\\address.ser"); ObjectOutputStream oos = new ObjectOutputStre... -
java将特定内容写入到txt文件内
2021-08-31 18:24:30/** * 从内存中写出数据到硬盘文件 * 输出的file可以不存在,不会报异常 * file对应的硬盘中的文件如果不存在,在输出... 提供File类的对象,指明写出到的文件 File file = new File("new.txt"); // 2. 提供FileW -
java将数据写入txt文件
2020-01-04 21:15:15通过 createNewFile() 来创建空文件 FileWriter 字符输出流 public FileWriter(String fileName) throws IOException BufferedWriter :字符缓冲输出流 BufferedWriter(Writer out) : 默认缓冲区大小构造字符缓冲... -
如何将Java对象读取和写入文件
2021-10-15 15:47:13转自:每日一课 | 如何将Java对象读取和写入文件Java对象序列化是Java库堆栈提供的一种API,用于序列化Java对象。序列化是将对象转换为可写字节流的过程。一旦转换为字节流,就可以将这些对象写入文件。反向过程称为... -
java使用ObjectOutputStream将对象写入到文件
2021-03-06 03:50:532014-02-24 06:30:02阅读( 772 )下面是要写入类Person的定义,此类需要实现Serializable接口import java.io.Serializable;/**** @author outofmemory.cn*/public class Person implements Serializable {private ... -
java 对象输入输出流读写文件的操作实例
2020-08-29 20:37:55主要介绍了java 对象输入输出流读写文件的操作实例的相关资料,这里使用实现Serializable接口,需要的朋友可以参考下 -
Java读取和写入txt文件
2021-03-15 01:30:271 问题描述对于java的读取和写入txt一直心存疑惑,随着知识的积累,又重新进行学习,对java的文件读写理解更加深刻,在这里将自己的小小经验总结分享给大家。下面是大家了解java流的一个基本框架。 2 问题分析在java... -
java读取数据写入txt文件并将读取txt文件写入另外一个表
2021-02-28 14:33:30importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.In... -
java读写txt文件的方法
2021-03-22 20:43:25java读写txt文件的方法发布时间:2020-06-26 15:54:02来源:亿速云阅读:111作者:Leah本篇文章为大家展示了java读写txt文件的方法,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能... -
java代码 如何向TXT文件写入内容?
2021-02-25 18:22:49展开全部向txt文件写入内容基本思路就是获得一个62616964757a686964616fe59b9ee7ad9431333337613134file对象,新建一个txt文件,打开I/O操作流,使用写入方法进行读写内容,示例如下:packagecommon;importjava.io.*... -
Java动态获取数据并写入txt文件
2021-09-17 16:58:38【首先】:创建一个File对象。 File writename = new File("C:\\Users\\maxm\\Desktop\\output.txt"); writename.createNewFile(); // 创建新文件 【其次】:创建一个FileWriter 和BufferedWriter对象。 ... -
java 读取和写入csv文件 (自动提取和转换成对象数据)-附件资源
2021-03-05 15:18:12java 读取和写入csv文件 (自动提取和转换成对象数据)-附件资源 -
Java读取、写入txt文件
2020-05-13 11:28:40JAVA读取、写入txt文件 1、读取 public String GetLogString(String logpath){ System.out.println("----------------开始读取日志----------------"); File logfile = new File(logpath+"\\log.txt"); ... -
关于json:在java中将String写入文本文件
2021-03-09 06:22:03想要将我从JSON解析的一些信息保存到纯文本中,我也希望每次运行程序时都不会覆盖这些信息。 它假设作为一个简单的错误记录系统工作。到目前为止我试过这个:FileWriter fileWriter = null;File file = new File("/... -
java中将list、map对象写入文件
2021-03-18 11:03:20java的IO包当中提供了,向文件中写入文件和读取文件的方法。好吧,来看下具体怎么回事吧。我们先写一个像文件当中写单个对象的方法吧。public void writeObject() {try {HashMap<String,String> map = new ... -
如何将复杂的Java对象写入CSV文件
2021-03-12 10:25:21因此,我知道如何将简单的Java对象写入CSV文件,但是我遇到了具有更复杂属性的Java对象的麻烦。以下是我目前拥有的一个示例:人.javapublic class Person {@CsvBindByName(column="name")private String name;@... -
JAVA读取TXT文件、新建TXT文件、写入TXT文件
2021-02-12 14:21:281、创建TXT文件按照正常的逻辑写就好先定义一个文件给定一个路径——>判断这个路径上这个文件存不存在——>若不存在则建立,try/catch根据程序提示自动生成就好2、读取TXT文件思路1:获得一个文件路径以这个... -
java如何从数据库读取数据并写入txt文件?
2021-01-19 08:07:49展开全部写Java程序时经常碰到要读如txt或写入txt文件的情况,但是由于要定义好多变量,经常记不住,每e69da5e6ba9062616964757a686964616f31333365643562次都要查,特此整理一下,简单易用,方便好懂![java]...