我有一台服务器,可以跟踪一些数据。当我使用管理员应用程序连接到服务器以检出数据的当前状态时。我使用5秒的刷新率。服务器第一次发送数据时,它可以工作。但是第二次,当数据更改时,管理端不会接收到最新数据。我正在通过ObjectOutputStream和ObjectInputStream发送包装在类中的数据:
这是数据的包装器类:
public class Leerling implements Serializable {
public int llnID;
public String naam;
public String voornaam;
public String klas;
public int klasNummer;
public Date geboorteDatum;
public String getFullName()
{
return voornaam + " " + naam;
}
@Override
public String toString() {
return "Leerling{" + "llnID=" + llnID + ", naam=" + naam + ", voornaam=" + voornaam + ", klas=" + klas + ", klasNummer=" + klasNummer + ", geboorteDatum=" + geboorteDatum + '}';
}
}
public class SLeerling extends Leerling implements Serializable{
public boolean voted;
public int vote = -2;
}
我尝试过的是从流中读取对象之前调用System.gc();以确保对象旧对象不再在内存中。但是没有成功。
有人知道确切的问题是什么吗?以及如何使其能够获取真实的最新数据?
提前致谢。
问题的第二个例子:
我又有一些其他数据的包装器类(这是一个内部类):
public static class MonitorResponse implements Serializable
{
public int numberOfLLN;
public int blocked;
public int blancos;
public List<Integer> votes;
}
当我第一次发送数据时,它可以工作。但是,第二次发送(更新)时,除以外的所有内容List<Integer> votes
都会更新。所以votes不刷新。然后我通过用数组替换List来解决这个问题:
public static class MonitorResponse implements Serializable
{
public int numberOfLLN;
public int blocked;
public int blancos;
public Integer[] votes;
}
这很完美。如果你问我,那很奇怪。代码的另一部分我几乎什么都没改变…(除了实现数组而不是List之外)
可能是ObjectOutputStream
造成麻烦的原因。
如果ObjectOutputStream
在服务器上使用单个对象,则需要确保对其进行调用reset
,否则它将对先前编写的对象写入共享引用。这听起来像您所看到的。
为了说明问题:
class BrokenServer {
void sendBrokenVoteData(ObjectOutputStream out) {
out.writeObject(votes);
changeVoteData(votes);
out.writeObject(votes); // Writes a shared reference to "votes" WITHOUT updating any data.
}
}
class FixedServer {
void sendFixedVoteData(ObjectOutputStream out) {
out.writeObject(votes);
changeVoteData(votes);
out.reset(); // Clears all shared references.
out.writeObject(votes); // Writes a new copy of "votes" with the new data.
}
}
问题内容: 我对文件进行迭代有问题。这是我在解释器上键入的内容和结果: 当我尝试再次遍历同一个打开的文件时,我什么也没得到! 根本没有输出。为了解决这个问题,我必须对文件进行编辑,然后再次将其打开以进行读取!那是正常行为吗? 问题答案: 是的,这是正常行为。基本上,你是第一次读取文件的末尾(可以像读取磁带一样对它进行图片处理),因此除非你使用重定位到文件开头的位置进行重置,否则你将无法从文件中读取
我尝试做什么: 我希望HashSet中充满程序不知道的新词。用户按下主机上的“转换”按钮。带有单词的文件的路径在主框架上给出。 如果单词是新单词,则会打开一个J对话框并要求插入新单词(因此您可以更改拼写,例如第一个字母大…)。 如果用户按下JDialog上的“写入”按钮,该单词将添加到HashSet中。 但是如果我在那之后打印我的HashSet,则只显示“旧”值。当我第二次按下主框架上的“转换”按
本文向大家介绍Java,C#使用二进制序列化、反序列化操作数据,包括了Java,C#使用二进制序列化、反序列化操作数据的使用技巧和注意事项,需要的朋友参考一下 java使用二进制序列化、反序列化的操作首先,要引入java.io下面相关包,或者直接写import java.io.*; 下面,为了书写操作的方便,采用复制文件,和throws声明异常的方式来写 初略代码,仅供参考! C#使用二进制序列化
我试图使用MathJax将HTML文本框(Tex)中键入的方程视为数学方程。如果没有正确地查看方程,我需要编辑方程,并在数学方程中查看它。 第一次,它工作正常。但是在执行编辑后,Mathjax排版命令显示错误。请您检查一下,并建议可能的错误。 我使用的HTML是: 我使用的脚本是: 当我第二次单击按钮时,它会显示以下错误: 未捕获的TypeError:无法在l.append(tex mml cht
嗨,我刚开始冬眠。我正在尝试一个示例程序,当我第二次执行代码时,hibernate没有创建表并挂起。当我单击数据库表时,数据库挂起。 我使用的是PostgreSQL-9.3.3-1版本和hibernate-release-4.3.4.final。 2.我的POJO课。我在pojo类中使用注释 userdetails.java } null
我已经在google上搜索了将近一天这个问题,并尝试了几个修复(包括StackOverflow的4或5个),但都没有成功。我有一个带注释的POJO,用于Jackson 2.10.2 我使用这个POJO为一些外部请求创建XML。一切都很好,但现在我需要重新排序生成的XML中的字段,似乎什么都不起作用。 我首先尝试在班级层面进行设置: 然后,我尝试使用以下命令设置每个字段的顺序: 我还尝试在所有字段上