【问题标题】:JAVA : Transferring files through socketJAVA:通过套接字传输文件
【发布时间】:2012-08-31 08:32:43
【问题描述】:

我在做什么: 我正在编写一个关于通过套接字连接进行客户端-服务器文件传输的程序。 服务器通过缓冲的ObjectOutputStream 将文件发送到客户端计算机。 逐字节发送文件

我想做什么: 能够从两端发送暂停/取消信号。

问题: 由于逐字节发送文件,我很困惑如何发送暂停/取消 从服务器到客户端的信号。请帮忙。

附加信息: 如果我从服务器向客户端发送一个整数/一个字节以指示 传输应该暂停或取消,它应该混淆客户端计算机 可以将这些字节作为文件的一部分读取!

【问题讨论】:

  • 添加相关代码你试过什么?
  • @THANGA 这是我的问题的一部分,这里的主要代码会令人困惑。你能给我什么建议吗?

标签: java stream streaming filestream


【解决方案1】:

我不会使用 ObjectOutptuStream,因为这可能效率低下。一次发送一个字节是非常低效的。

我会改用 DataOutputStream。

在任何情况下,解决方案都差不多。发送者可以通过不发送数据来暂停。接收方可以通过不读取数据来暂停,这会导致发送方阻塞。

【讨论】:

  • 是这样初始化的ObjectOutputStream os=new ObjectOutputStream(new BufferedOutputStream(...)) 还是效率低吗?
  • ObjectOututStream 已被缓冲。发送一个 Byte 需要 70 个字节,每个额外的 Byte 大约需要 10 个字节。如果您使用 DataOutputStream,您可以在一次调用中阻止 byte[],这将至少快 100 倍,小 10 倍。
  • 是否有任何OutputStream 我只写入字节,它自动 将其写入缓冲区,当缓冲区已满时,它会发送缓冲的字节?
  • AFAIK,JDK 中的每个 OutputStream 都执行此操作,但 BufferedOutputStream 和 ObjectOutputStream 除外。 ;) 我将 DataOutputStream 用于 writeUTF() 之类的方法来发送名称等字符串,并使用 wrietInt() 或 writeLong() 来发送长度。
  • 我还是不明白,如果我使用 'DataOutputStream' 并写入字节(不是作为 byte[] 数组,通过一个又一个字节发送),它仍然会被有效地缓冲吗?还有一件事,我如何向客户发送信号,告知要取消转移? (问如何暂停传输很愚蠢)
猜你喜欢
  • 2018-08-19
  • 2020-12-02
  • 2012-07-12
  • 1970-01-01
相关资源
最近更新 更多