Java 如何将对象序列化为字符串

我能够将一个对象序列化为一个文件,然后再次还原它,如下面的代码片段所示。我想将对象序列化为字符串并存储到数据库中。谁能帮我?

LinkedList<Diff_match_patch.Patch> patches = // whatever...

FileOutputStream fileStream = new FileOutputStream("foo.ser");

ObjectOutputStream os = new ObjectOutputStream(fileStream);

os.writeObject(patches1);

os.close();

FileInputStream fileInputStream = new FileInputStream("foo.ser");

ObjectInputStream oInputStream = new ObjectInputStream(fileInputStream);

Object one = oInputStream.readObject();

LinkedList<Diff_match_patch.Patch> patches3 = (LinkedList<Diff_match_patch.Patch>) one;

os.close();

回答:

你应该使用BLOB。使用JDBC非常简单。

你发布的第二个代码的问题是编码。你还应该对字节进行编码,以确保它们均不会失败。

如果你仍然想将其记录为字符串,则可以使用java.util.Base64对字节进行编码。

仍然应该将CLOB用作数据类型,因为你不知道序列化数据将持续多长时间。

这是一个如何使用它的示例。

import java.util.*;

import java.io.*;

/**

* Usage sample serializing SomeClass instance

*/

public class ToStringSample {

public static void main( String [] args ) throws IOException,

ClassNotFoundException {

String string = toString( new SomeClass() );

System.out.println(" Encoded serialized version " );

System.out.println( string );

SomeClass some = ( SomeClass ) fromString( string );

System.out.println( "\n\nReconstituted object");

System.out.println( some );

}

/** Read the object from Base64 string. */

private static Object fromString( String s ) throws IOException ,

ClassNotFoundException {

byte [] data = Base64.getDecoder().decode( s );

ObjectInputStream ois = new ObjectInputStream(

new ByteArrayInputStream( data ) );

Object o = ois.readObject();

ois.close();

return o;

}

/** Write the object to a Base64 string. */

private static String toString( Serializable o ) throws IOException {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ObjectOutputStream oos = new ObjectOutputStream( baos );

oos.writeObject( o );

oos.close();

return Base64.getEncoder().encodeToString(baos.toByteArray());

}

}

/** Test subject. A very simple class. */

class SomeClass implements Serializable {

private final static long serialVersionUID = 1; // See Nick's comment below

int i = Integer.MAX_VALUE;

String s = "ABCDEFGHIJKLMNOP";

Double d = new Double( -1.0 );

public String toString(){

return "SomeClass instance says: Don't worry, "

+ "I'm healthy. Look, my data is i = " + i

+ ", s = " + s + ", d = " + d;

}

}

输出:

C:\samples>javac *.java

C:\samples>java ToStringSample

Encoded serialized version

rO0ABXNyAAlTb21lQ2xhc3MAAAAAAAAAAQIAA0kAAWlMAAFkdAASTGphdmEvbGFuZy9Eb3VibGU7T

AABc3QAEkxqYXZhL2xhbmcvU3RyaW5nO3hwf////3NyABBqYXZhLmxhbmcuRG91YmxlgLPCSilr+w

QCAAFEAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cL/wAAAAAAAAdAAQQUJ

DREVGR0hJSktMTU5PUA==

Reconstituted object

SomeClass instance says: Don't worry, I'm healthy. Look, my data is i = 2147483647, s = ABCDEFGHIJKLMNOP, d = -1.0

注意:对于Java 7和更早版本,你可以在此处看到原始答案

以上是 Java 如何将对象序列化为字符串 的全部内容, 来源链接: utcz.com/qa/431865.html

回到顶部