【问题标题】:Getting Progress of ObjectOutputStream/ObjectInputStream获取 ObjectOutputStream/ObjectInputStream 的进度
【发布时间】:2011-07-18 23:16:58
【问题描述】:

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

【问题讨论】:

    标签: java sockets progress objectoutputstream objectinputstream


    【解决方案1】:

    Apache Commons IO 库有一对类 CountingInputStreamCountingOutputStream,它们实现字节计数输入/输出流过滤器。

    如果将这些插入到流链中,您可以跟踪读取或写入的字节数。 (这些过滤器必须插入物理输入/输出流和对象流之间的某个位置。)

    您可以通过继承 FilterInputStreamFilterOutputStream 类来自己实现相同的功能。甚至还有一个名为 ProgressMonitorInputStream 的 Swing 类可能完全实现你所需要的。

    【讨论】:

    • 这似乎是我需要的,但这是一种预测数据将如何发送的方法吗? Aka,找出一个对象有多大,这样我就可以估算出转移的百分比?
    • AFAIK,不,没有办法。
    • (这是一般的答案。在某些情况下您可以;例如,如果您使用 HTTP 并且另一端在请求或响应中包含准确的 Content-length 标头,或者您正在阅读文件系统中的一个文件。)
    【解决方案2】:

    我建议编写检测的 InputStream 和 OutputStream,它们只是在构建时提供的流之间通过管道传输,同时计算通过的字节数。

    然后,您可以在插入上述内容之一的情况下构建您的流链——请注意不要在检测的 OutputStream 和网络之间有太多缓冲区,否则您将计算进入缓冲区而不是进入缓冲区的字节数网络。

    您还可以通过编写另一个输出流来计算要发送的总字节数,该输出流只是将数据丢弃并通过您的检测输出流将您的对象写入一次。

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 2015-01-05
      • 2013-08-29
      • 1970-01-01
      • 2012-10-17
      • 2019-06-07
      • 2016-04-11
      • 2012-05-29
      • 1970-01-01
      相关资源
      最近更新 更多