问题标签 [objectinputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2984 浏览

java - java初始化流输入/输出的变量

我对以下代码有疑问。目前尚不清楚如何初始化输入/输出变量。

在创建此对象期间,程序在构造函数中时挂起。它挂在this.inObjects = new ObjectIn.......... 我想创建这些输入/输出对象一次,仅通过在方法中调用它们并应用读写等来读取和写入输入/输出、字符串和对象

我哪里错了?有没有可能因为不接收数据而挂起?他们不应该,对吧?

0 投票
3 回答
4214 浏览

java - 升级 Java 可序列化类

我已经阅读了有关序列化和使用 serialVersionUID 的各种博客。他们中的大多数提到使用它来维护可序列化类的状态。

我的情况是;

我知道旧的serialVersionUID 和新的serialVersionUID。

在读取具有旧 serialVersionUID 的对象时,我想操作数据以使其适合新版本,如果我正在读取的对象是旧类型,我只想费心去做。

这似乎应该是非常直截了当的事情!

有没有办法在读入对象时获取 serialVersionUID?

InvalidClassException 在调用序列化类中的 readObject 方法之前引发,因此我无法在那里访问它。

我发现的唯一提示是覆盖 ObjectInputStream 以便 readClassDescriptor() 可用,尽管这似乎是解决必须是常见问题的重量级解决方案!

感谢所有帮助!

0 投票
1 回答
1895 浏览

java - 使用 ObjectOutputStream 删除特定数据

我目前正在尝试编写一个程序来将有关人员的数据存储到 .dat 文件中。程序必须能够添加条目、显示条目和删除条目(所有这些都是同一类型的对象)。

我遇到的麻烦是删除条目。我被明确指示不要使用随机访问文件,但我需要能够删除特定位置的数据。我不确定如何定义要删除的条目,因为我无法控制任何类型的指针。我有一种查找条目位置的方法,但我无法删除对象位置的数据。

有没有办法让我定义 ObjectOutputStream 应该去哪里删除数据?我将如何删除特定条目?

0 投票
2 回答
1524 浏览

java - 获取 ObjectOutputStream/ObjectInputStream 的进度

我最近想出了如何使用 ObjectOutputStream 和 ObjectInputStream 通过服务器和客户端之间的简单 Java 套接字连接发送对象。我想知道是否要传输可能很大的对象,例如图像,是否可以放置一个线程来跟踪已发送/接收多少数据的进度?如果这个问题的答案不是很直接,有人可以解释我如何去做类似的事情吗?提前致谢!

0 投票
5 回答
8612 浏览

java - ObjectInputStream 对 FileInputStream 满意,对 getResourceAsStream 不满意

我有一些非常标准的代码,它从流中接收序列化对象,基本上看起来像这样:

然后我的资源文件夹中有一个文件,所以在我的开发机器上,我可以将它作为文件引用,也可以作为 JarResource 引用:

在我看来,两者都应该做同样的事情。然而,碰巧的是,两者都解析为有效(非空)流,但 FileInputStream 从我的 getObjectFromStream(InputStream) 方法正确返回了一个 Object,而 getResourceAsStream 版本抛出此异常:

大多数情况下,我想知道如何解决这个问题,但我也希望了解两个 InputStreams 之间的区别......

0 投票
3 回答
7343 浏览

java - 无法在 Android 平台上为蓝牙套接字创建带有 InputStream 的 ObjectInputStream

我正在为 Android 手机编写多人游戏。通信是通过蓝牙进行的。我已经设法使用输入/输出流将字节从一部手机发送到另一部手机。因为我需要能够传输对象,所以我想要对象流。但是,当我尝试使用我的流创建一个 Objectstream 时,我的程序会挂在指令上。

//指令 new ObjectInputStream(mmInStream) NEVER FINISHES EXECUTING . 它似乎不会引发错误,因为我会抓住它。它只是挂在这个指令上。这行下面的代码都没有被执行过。

我究竟做错了什么?

0 投票
2 回答
1229 浏览

java - Java 使用 ObjectInputStream 读取不同的变量

我有一个 ObjectInputStream 需要读取两个不同的输入,它们是字符串和我自己创建的对象。我有一个线程不断等待输入,并且根据输入,无论是字符串还是对象,它都会处理结果。我需要一种方法让输入能够区分两者。

任何帮助都会很棒。

谢谢

0 投票
2 回答
1437 浏览

java - 当必须接受许多连接时,我在客户端/服务器类型应用程序中遇到 Java 套接字问题

首先,感谢您的阅读。这是我第一次以用户身份使用 stackoverflow,尽管我一直在阅读并找到有用的解决方案:D。顺便说一句,对不起,如果我解释得不够清楚,我知道我的英语不是很好。

我的基于套接字的程序有一个奇怪的行为,以及一些性能问题。客户端和服务器通过以多线程方式将序列化对象读/写到对象输入和输出流中来相互通信。让我向您展示代码基础知识。我已将其简化为更具可读性,并且故意省略了完整的异常处理。服务器的工作方式如下:

服务器:

LjServerThread 类,每个客户端创建一个实例:

而且,客户端是这样的:

好吧,如您所见,在服务器端处理接受的客户端的 LjServerThread 类测量它所花费的时间......通常,它需要 75 - 120 毫秒(其中 x 是 IP):

  • 客户端 x 成功完成。
  • 运行时间:82
  • 客户端 x 成功完成。
  • 运行时间:80
  • 客户端 x 成功完成。
  • 运行时间:112
  • 客户端 x 成功完成。
  • 运行时间:88
  • 客户端 x 成功完成。
  • 运行时间:90
  • 客户端 x 成功完成。
  • 运行时间:84

但突然间,没有可预测的模式(至少对我来说):

  • 客户端 x 成功完成。
  • 运行时间:15426

有时达到25秒!偶尔一小群线程会慢一点,但这并不让我担心:

  • 客户端 x 成功完成。
  • 运行时间:239
  • 客户端 x 成功完成。
  • 运行时间:243

为什么会这样?这可能是因为我的服务器和我的客户端在同一台机器上,具有相同的 IP?(要进行此测试,我在同一台机器上执行服务器和客户端,但它们使用我的公共 IP 通过 Internet 连接)。

这就是我测试的方式,我在 main() 中向服务器发出这样的请求:

如果我在没有“Thread.sleep(100)”的情况下循环执行,我会收到一些连接重置异常(7 或 8 个连接重置为 400,或多或少),但我想我明白为什么会发生这种情况:当 serverSocket.accept () 接受一个连接,需要花费很短的时间再次到达 serverSocket.accept() 。在此期间,服务器无法接受连接。会不会是因为这个?如果不是,为什么?很少有 400 个连接同时到达我的服务器,但它可能会发生。如果没有“Thread.sleep(100)”,时间问题也会更糟。

提前致谢!


更新:

多么愚蠢,我在 localhost 中对其进行了测试......它没有给出任何问题!有无“Thread.sleep(100)”,没关系,它工作正常!为什么!所以,正如我所看到的,我关于为什么连接重置被抛出的理论是不正确的。这让事情变得更加奇怪了!我希望有人可以帮助我...再次感谢!:)


更新(2):

我在不同的操作系统中发现了明显不同的行为。我通常在 Linux 中开发,我解释的行为是关于我的 Ubuntu 10.10 中发生的事情。在 Windows 7 中,当我在连接之间暂停 100 毫秒时,一切正常,并且所有线程都快速点亮,没有人花费超过 150 毫秒左右(没有连接速度慢的问题!)。这不是在 Linux 中发生的事情。但是,当我删除“Thread.sleep(100)”时,不是只有一些连接获得连接重置异常,而是所有连接都失败并抛出异常(在 Linux 中只有其中一些,400 个中有 6 个左右)失败了)。

呸!我刚刚发现不仅操作系统,JVM 环境也有一点影响!没什么大不了的,但值得注意。我在 Linux 中使用 OpenJDK,现在使用 Oracle JDK,我发现随着我减少连接之间的睡眠时间,它开始更早地失败(50 毫秒 OpenJDK 工作正常,没有抛出异常,但 Oracle 的一个相当不错很多有 50 毫秒的睡眠时间,而有 100 毫秒的工作正常)。

0 投票
3 回答
217 浏览

java - 通过带有对象输入/输出流的 Socket 发送的对象的大小真的很重要吗?

在每次单独调用ObjectOutputStream#writeObject之后刷新 OutputStream比在一系列对象写入之后刷新流是否更有效?(例如:写入对象并刷新 4 次,或者写入 4 次然后仅刷新一次?)

ObjectOutputStream如何在内部工作?

0 投票
4 回答
668 浏览

java - 是否可以在java中随机访问对象?

基本上我有一个字符串对象文件。我使用 Java ObjectOutputStream来存储对象。是否可以随机访问对象(字符串),例如如果我想访问第 11 个对象,我可以以某种方式跳转到该位置,而不必第 11 次使用readObject()循环到该位置。如果我想跳回来,我也可以这样做,而不必从头开始循环。谢谢。

正如建议的那样,我想我可以以某种方式使用 skipBytes() 方法来实现某种随机访问。虽然我不能保证我的对象是固定大小的,但是如果我可以在文件中保留这些对象的位置数组,我可以使用该数组作为索引并使用 skipBytes() 进行随机访问。所以问题仍然存在,无论如何我可以在实际编写对象时知道对象的大小,以便我可以以某种方式记录位置?