gpt4 book ai didi

scala - 如何使用 @serializable scala 对象?

转载 作者:行者123 更新时间:2023-12-04 00:36:51 25 4
gpt4 key购买 nike

我知道您可以将 Scala 对象标记为 @serializable ,但我不明白之后如何处理该对象。我是否只是将其视为 Java Serializable 对象?

我想将对象序列化为字节流。有人可以向我展示将序列化对象转换为字节数组或字符串的代码吗?

(谷歌对这个问题没有帮助)

跟进:谢谢。我现在明白我可以像 Java 一样使用它 Serializable对象。有时,显而易见的答案让我望而却步。

最佳答案

回答您的第一个问题:是的,您可以将其视为 Java Serializable 对象:


scala> @serializable object A
defined module A

scala> import java.io.ByteArrayOutputStream;
import java.io.ByteArrayOutputStream

scala> import java.io.ObjectOutputStream;
import java.io.ObjectOutputStream

scala> val baos = new ByteArrayOutputStream(1024)
baos: java.io.ByteArrayOutputStream =

scala> val o = new ObjectOutputStream(baos)
o: java.io.ObjectOutputStream = java.io.ObjectOutputStream@3d689405

scala> o.writeObject(A)

scala> baos.toByteArray
res4: Array[Byte] = Array(-84, -19, 0, 5, 115, 114, 0, 24, 108, 105, 110, 101, 49, 51, 36, 111, 98, 106, 101, 99, 116, 36, 36, 105, 119, 36, 36, 105, 119, 36, 65, 36, 110, -104, -28, -53, -123, -97, -118, -36, 2, 0, 0, 120, 112)

scala> object B
defined module B

scala> o.writeObject(B)
java.io.NotSerializableException: B$
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at .(:13)
at .()
at RequestResult$.(:9)
at RequestResult$.()
at RequestResult$scala_repl_result()
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
at scala.tools.nsc.Interpreter$Request$...


如果你想序列化为某种字符串格式,也许是 this library可能很有用,它将 scala 对象序列化为 JSON。

关于scala - 如何使用 @serializable scala 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3442171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com