- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在java中序列化一个对象。目前我正在使用 this code 来做到这一点,它的作用是:
并反转该过程。
它适用于类内部的基本类型,例如 long
和 int
。
但是,该对象内的所有 String
对象都会变为 null
。 我也需要将它们包含在内。有什么办法可以做到吗?
编辑:我正在使用的代码
// Modified from source: https://stackoverflow.com/questions/134492/how-to-serialize-an-object-into-a-string
public static Object FromString( String s )
{
Object o = null;
try {
byte[] data = Base64.getDecoder().decode(s);
ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream(data));
o = ois.readObject();
ois.close();
}
catch(Exception e)
{
System.out.println(e);
}
return o;
}
// Modified from source: https://stackoverflow.com/questions/134492/how-to-serialize-an-object-into-a-string
public static String ToString( Serializable o )
{
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
oos.close();
}
catch(Exception e)
{
System.out.println(e);
}
return Base64.getEncoder().encodeToString(baos.toByteArray());
}
编辑:Pojo
public class SignedTimestamp implements Serializable {
private Long obj;
private byte[] signature;
private String signatureAsAString;
}
其他应用程序的输出(接收数据并反序列化):
obj = 1494609033621;
signature = null;
signatureAsAString = null;
最佳答案
我刚刚测试了您的代码,它工作正常。
我创建了一个名为SignedTimeStamp.java的源:
import java.io.*;
public class SignedTimestamp implements Serializable {
private Long obj;
private byte[] signature;
private String signatureAsAString;
public SignedTimestamp(Long obj, byte[] signature, String signatureAsAString) {
this.obj = obj;
this.signature = signature;
this.signatureAsAString = signatureAsAString;
}
public Long getObj() {
return this.obj;
}
public byte[] getSignature() {
return this.signature;
}
public String getSignatureAsAString() {
return this.signatureAsAString;
}
}
并声明了另一个名为 Serializeds.java 的文件,其中包含您的代码: 导入 java.io.; 导入java.util.;
public class Serializables {
public static Object FromString(String s) {
Object o = null;
try {
byte[] data = Base64.getDecoder().decode(s);
ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream(data));
o = ois.readObject();
ois.close();
}
catch(Exception e)
{
System.out.println(e);
}
return o;
}
// Modified from source: http://stackoverflow.com/questions/134492/how-to-serialize-an-object-into-a-string
public static String ToString( Serializable o ) {
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
oos.close();
}
catch(Exception e)
{
System.out.println(e);
}
return Base64.getEncoder().encodeToString(baos.toByteArray());
}
}
然后,我在 Serialize.java 中创建了一个主类:
public class Serialize {
public static void main(String[] args) throws Exception {
SignedTimestamp o = new SignedTimestamp(100L, new byte[]{ (byte) 128 }, "Hello, world!");
System.out.println(Serializables.ToString(o));
}
}
这给我返回了这个结果:
sh-4.3$ java Serialize
rO0ABXNyAA9TaWduZWRUaW1lc3RhbXCGTHiJ+JenzgIAA0wAA29ianQAEExqYXZhL2xhbmcvTG9uZztbAAlzaWduYXR1cmV0AAJbQkwAEnNpZ25hdHVyZUFzQVN0cmluZ3QAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IADmphdmEubGFuZy
5Mb25nO4vkkMyPI98CAAFKAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAAAAABkdXIAAltCrPMX+AYIVOACAAB4cAAAAAGAdAANSGVsbG8sIHdvcmxkIQ==
sh-4.3$
然后,我在Deserialize.java中创建了另一个主类:
public class Deserialize {
public static void main(String[] args) throws Exception {
String serialized =
"rO0ABXNyAA9TaWduZWRUaW1lc3RhbXCGTHiJ+JenzgIAA0wAA29ianQAEExqYXZhL2xhbmcvTG9uZztbAAlzaWduYXR1cmV0AAJbQkwAEnNpZ25hdHVyZUFzQVN0cmluZ3QAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IADmphdmEubGFuZy" +
"5Mb25nO4vkkMyPI98CAAFKAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAAAAABkdXIAAltCrPMX+AYIVOACAAB4cAAAAAGAdAANSGVsbG8sIHdvcmxkIQ==";
SignedTimestamp o = (SignedTimestamp) Serializables.FromString(serialized);
System.out.println(o.getObj());
System.out.println(o.getSignature());
System.out.println(o.getSignatureAsAString());
}
}
它返回这个:
sh-4.3$ java Deserialize
100
[B@6bc7c054
Hello, world!
sh-4.3$
所以,总而言之,代码似乎运行完美。你是如何测试你的代码的?也许错误就在那里。
关于java - 如何使用ObjectOutputStream.writeObject()+Base64 (Java)深度序列化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43943061/
我想编写一个 cmdlet,从数据库中读取多条记录并将它们放入管道。 我想我可以做一个WriteObject(Enumerable, true)或者我可以自己循环并调用 WriteObject多次。
什么更快? out.writeObject(someString) 或 out.writeUTF(someString) 最佳答案 我希望人们从这个问题中学到两件事:Java 序列化很慢 - 忍受它。
我对这段代码有一些问题...这是一个 JDialogForm,其中有 jTextField 和按钮。当我单击按钮在另一个窗口中使用它时,我想保存此 Jtextfield 中的数据,但我不知道为什么它不
我正在尝试做什么 我有一个服务器类,故意没有传递任何参数,并且想用 Mockito 测试它。 如果您想查看 Github 上的完整源代码: Server ServerTest 服务器.class pu
我正在学习垃圾收集和 Java 对象序列化。在我包含序列化代码之前的代码中,3 个对象正在完成。现在只有一个 finalize() 被调用并在创建 FileOutputStream 对象后进入我的程序
我正在开发一个应用程序,该应用程序必须将对象序列化为文件以供以后使用。有多个线程调用方法writeObject (对于不同的对象,相同的文件)并发。该方法是线程安全的吗?我是否必须在应用程序代码中同步
对于类作业,我需要将对象写入文件。我们的教授给了我们一段代码来完成这个任务,但显然它是错误的,因为我收到了一个错误。这是我的代码。 class InvMaintenance { //creat
我有一些通过 RMI 序列化同时访问的对象。最近我编写了自定义序列化方法: /** This method is made to omit serialization of this.order */
似乎是一个非常简单的问题,但我在谷歌上找不到直接答案。 我在两个进程之间通过 UDP 有一个简单的 IPC channel 。每条消息都包装在 header 类中(例如数据驱动)。 例如。 enum
我正在使用ObjectOutputStream保存对象,但是当我使用.writeObject(this)将其保存为文件时,无法保存 Material 。我定义的类已经是可序列化的。 public cl
我正在尝试实现一个保存功能来保存游戏的当前状态。这是我的代码: public class MyGame extends javax.swing.JFrame implements Serializab
我正在做一些关于 Java 的作业,但我不擅长它,并且在尝试使用 XMLEncoder 将 App 对象存储到文件时遇到问题。 简而言之,我的应用程序有一个名为 animal 的抽象类。另一个扩展了前
这似乎是一个奇怪的问题,但看看这个简单的代码: public class Father implements Serializable{ private static final long s
我希望我不只是发现 Java 中的错误!我正在运行 JDK 7u11(主要是因为这是我的雇主允许的认可的 JVM),并且我注意到一个非常奇怪的问题。 也就是说,我将数据分块到 LinkedHashSe
我正在创建一个软件,多个客户端可以在“同一” Canvas 上绘图。这是通过将绘制点的 ArrayList 发送到服务器并返回来完成的。现在,我已经设置了 ListArray,但我需要它不断更新,以便
我正在为我的一堆类使用序列化代理模式,并且最近将 FindBugs 添加到我的构建过程中,现在我想知道 FindBugs 是否正确...... 这是有问题的类: public class Block
我想使用 ObjectOutputStream.writeObject() 将哈希表序列化为文件,但我希望编写器始终覆盖任何现有对象,以便只存在一个对象: FileOutputStream fout
你好,我想告诉你,我为我的游戏制作了多人游戏并且它有效,但是从欧洲的一侧到另一侧,需要 8 秒。没有太多要发送的,它只发送一个具有 float x,float y 和 String username
需要序列化,我理解这一点,但是 stream.defaultWriteObject() 如何实际访问它们,因为它们是私有(private)的、静态的和最终的。 我的 CS 讲师无法解释这一点(或者他只
我正在尝试创建一些本地聊天软件。一切正常,但只停留在一点上;当用户单击按钮时,我的程序会卡住。 我编写了一个修改后的类,它的行为适用于服务器和客户端。 下面是我的代码: package connect
我是一名优秀的程序员,十分优秀!