Java 如何将JVM对象序列化和反序列化为字符串?

Java 如何将JVM对象序列化和反序列化为字符串?,java,scala,serialization,Java,Scala,Serialization,我正在尝试将对象序列化/反序列化为字符串。(字节数组不能满足我的需要。) 我有以下代码: inline def序列化(o:Object):字符串= val baos=新的ByteArrayOutputStream() val oos=新对象输出流(BAS) oos.writeObject(o) val bytes=baos.toString(java.nio.charset.StandardCharsets.UTF_8) 关闭 oos.close 字节 内联定义反序列化(b:字符串):对象= v

我正在尝试将对象序列化/反序列化为字符串。(字节数组不能满足我的需要。)

我有以下代码:

inline def序列化(o:Object):字符串=
val baos=新的ByteArrayOutputStream()
val oos=新对象输出流(BAS)
oos.writeObject(o)
val bytes=baos.toString(java.nio.charset.StandardCharsets.UTF_8)
关闭
oos.close
字节
内联定义反序列化(b:字符串):对象=
val bytes=b.getBytes(java.nio.charset.StandardCharsets.UTF_8)
val bais=新的ByteArrayInputStream(字节)
val ois=新对象输入流(BAI)
val ret=ois.readObject()
拜斯·克洛斯
结束
ret
这似乎应该可以工作,但我在运行(反序列化)时遇到此错误:

[info]运行co.block.dotty\u reflection.RunMe
[错误](run-main-3)java.lang.ExceptionInInitializeError
[错误]java.lang.ExceptionInInitializeError
[错误]位于co.block.dotty_reflection.RunMe.main(RunMe.scala)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处的[error]
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)处的[error]
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)处的[error]
[错误]位于java.base/java.lang.reflect.Method.invoke(Method.java:566)
[错误]原因:java.io.StreamCorruptedException:无效的流头:EFBFBDEF
[错误]位于java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:877)
[错误]位于java.base/java.io.ObjectInputStream。(ObjectInputStream.java:350)
[错误]位于co.block.dotty_reflection.RunMe$(RunMe.scala:11)
[错误]位于co.block.dotty_reflection.RunMe$(RunMe.scala)
[错误]位于co.block.dotty_reflection.RunMe.main(RunMe.scala)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处的[error]
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)处的[error]
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)处的[error]
[错误]位于java.base/java.lang.reflect.Method.invoke(Method.java:566)
我遗漏了什么?

您的问题是:

val bytes = baos.toString(java.nio.charset.StandardCharsets.UTF_8)

这不会像你希望的那样起作用。相反,请尝试使用Base64编码器/解码器。这应该行得通

您可能希望将scala和dotty标记添加到此相关文件:为什么不使用JSON、CSV、XML、Protobuf或任何其他真正的序列化格式?
val bytes = baos.toString(java.nio.charset.StandardCharsets.UTF_8)