- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你能帮我理解如何实现序列化吗?我已经阅读了很多有关序列化和代码的内容,但我不知道如果涉及更多类,如何实现它。在我的 GUI 应用程序中,用户输入的 regNo
、carType
和 Date
信息被发送到协调对象 corObj
>,使用这 3 个值创建汽车实例。
corObj
对象? corObj
对象保留对每个创建的汽车实例的引用集合。那么反序列化后 corObj 如何再次引用那些重建的汽车实例呢?
先前创建的汽车实例集合会自动引用回重建的汽车吗?如果不是,其他对象如何获取重建实例的引用?你能给我一些简单的例子吗?
最佳答案
Where does the serialization code for the car go? Into Car class or into corObj object?
假设您使用的是 ObjectOutputStream
,序列化数据将流式传输到 ObjectOutoutStream
所包装的任何位置。它可能是使用 FileInputStream
将数据流式传输到驱动器上的文件的本地存储:
File file = new File("car.obj");
FileOutputStream fileOut = new FileOutputStream(file);
ObjectOutputStream objOut = new ObjectOutputStream(fileOut);
objOut.writeObject(new Car()); //write
objOut.close();
FileInputStream fileIn = new FileInputStream(file);
ObjectInputStream objIn = new ObjectInputStream(fileIn);
Car car = (Car) objIn.readObject();
序列化数据的去向取决于您传递给 ObjectOutputStream
构造函数的内容。
上面显示了向本地存储写入/读取本地存储。您可以使用 ByteArrayOutputStream
将数据保存在内存中,或者使用 Socket
中的流通过网络发送数据。
After 3 cars have been serialized how can the 3 cars can be deserialized?
您必须自己跟踪这一点。一旦序列化数据离开流,它实际上就不再存在于您的应用程序中(除非您将其流式传输到内存)。
流的重点是 I/O(输入/输出)——您通过连接将数据发送到某个地方。
可以通过写入ByteArrayOutputStream
将其保留在您的应用程序中:
ByteArrayOutputStream arrayOut = new ByteArrayOutputStream();
ObjectOutputStream objOut = new ObjectOutputStream(arrayOut);
//write object
byte[] data = arrayOut.toByteArray(); //must keep a reference to this data! Contains serialized object
ByteArrayInputStream arrayIn = new ByteArrayInputStream(data);
ObjectInputStream objIn = new ObjectInputStream(arrayIn);
//read object
或者您可以通过 FileOutputStream
或来自 Socket
的输出流将其从程序中流出。
File file = new File("car.obj"); //must keep a reference to this file! Specified where serialized object is
ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream(file));
//write object
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
//read object
corObj object keeps the collection of references to each created car instance. So after deserialization how can corObj refer again to those reconstructed car instances?
您必须跟踪将这些对象流式传输到的位置。如果流式传输到本地存储,您必须跟踪文件名。如果流式传输到 ByteArrayOutputStream
,您必须保留该字节流的引用。
Would the previously created collection of car instances automatically refer back to reconstructed cars
没有。通过反序列化,您正在创建一个新对象。如果序列化集合中的一个对象,然后反序列化该对象而不从集合中删除该对象,那么您现在就有 2 个对象。
<小时/>我强烈建议阅读我在 What is the penalty for unnecessarily implementing Serializable? 上的回答。如果序列化一个对象,则在反序列化该对象之前修改该对象的类,尝试反序列化该对象可能会失败,因为二进制数据将不再匹配。
关于java - 涉及多个类的序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44522776/
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我有一个在 ab 时间内运行的算法,其中 a 和 b 都是单独的输入。 我的算法还是多项式时间复杂度算法还是nn?我认为 nn 不是多项式,但我仍然不确定。 我看到 n 算法的阶乘仍然评估为 nn 复
这个问题在这里已经有了答案: Logical operators (AND, OR) with NA, TRUE and FALSE (2 个回答) 1年前关闭。 由于“is.na(NA)”返回真,“
假设我有一个具有以下结构的 Pandas 数据框: df = pd.DataFrame(dict(a=["x", "x", "y"], b=[0, 1, 1], c=[1, 2, 2])) 我想按 a
谁能帮我处理一些相当复杂的 Django 查询? 这些是我的模型: class County(models.Model): name = models.CharField(max_length
我想从某个表中选择一行并根据另一个表对结果进行排序。 这是我的表: lang1_words: word_id - word statuses: word_id - status 在每个表中 word_
我是单元测试的新手,所以请对我宽容一些。我有一些查询 RESTful API 的模块。我发现在每个测试套件中,我都使用几行代码来启动一个简单的 ExpressJS Web 服务器,以模拟一些我可以从测
假设我有以下代码: var blinker = function(element){ if(stopped){ return; } else { var sampleMappi
我正在用 JavaScript 制作一个选择你自己的冒险风格的游戏,在本节中: evade = prompt("Go out of your way to avoid them, just in ca
我的代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Events1 extends
我正在使用 scipy ode 来解决钟摆问题。 from scipy import * import matplotlib.pyplot as plt from scipy.integrate im
我有一个 Google 表格,用于收集客户的注册数据。收集的数据包括学生的姓名、学生选择参加的类(class)以及信用卡号。提交后,我会收到通知。收到通知后,我会转到我的 Google 表格并从信用卡
我需要定义一个操作的两个版本,定义略有不同。它是一系列包含Nat指数的成分。 open import Data.Nat data Hom : ℕ → ℕ → Set where id : (
我正在研究游戏引擎 http://ducttape-dev.org使用 boost 作为依赖项之一。有一天,当我正在编写一个链接到我的游戏引擎的测试应用程序时,OgreProcedural 的 Ext
我正在 Android 中制作一个表达式计算器,所以我想在实际计算答案之前检查字符串是否符合有效表达式的条件。 我在 Java 中试过这个正则表达式: ^\s*([-+]?)(\d+)(?:\s*([
我有以下 postgresql 查询(为便于阅读而简化): select * from a_view where a in (select * from a_function(a_input))
我开始更好地掌握 PostgreSQL 索引,但我遇到了 OR 条件的问题,我不知道如何优化我的索引以加快查询速度。 我有 6 个条件,当单独运行时,它们的成本似乎很小。下面是修剪查询的示例,包括查询
有谁知道为什么下面的代码接受诸如123-123-1234这样的答案: [1-9]\\d{2}-[1-9]\\d{2}-\\d{4} 我想到了代码,它只接受先接受 2 个数字,再接受 2 个数字,然后再
在使用 Java 1.8u40 打开带有提示类型和附加的 StringConverter 的组合框时,我遇到了以下错误。这可以追溯到执行 FXML 的团队留下的示例字符串,与 Controller 中
在 MySQL 中,我有三个不同的数据库 - 我们将它们称为 A、B 和 C。 是否可以执行涉及所有三个数据库(A、B、C)中的表的事务? (所有数据库都在同一服务器上) 最佳答案 是的,你可以。这是
我是一名优秀的程序员,十分优秀!