【问题标题】:writing files / large amount of bytes fails写入文件/大量字节失败
【发布时间】:2012-08-25 20:31:59
【问题描述】:

我正在通过套接字写入文件/大量字节。

但是假设我正在写字节。我这样做;

//Connection.data is a dataoutputstream
byte[] a = new byte[filelength];
//load file into the array
//write file
for (int i = 0; i < a.length; i++) {
Connection.data.writeByte(a[i]);                                              
}

接收:

//dat is a datainputstream
byte[] byteA = new byte[bytestoread]
for (int i = 0; i < toread; i++) {
        byteA[i] = dat.readByte();
}

我确实记录了传入的数据,如果文件是 200000 字节,它会停在大约 199990 字节等处。基本上,任何大小的字节 [],它都会 停在最后一个字节,然后超时。如果你不明白,我会解释更多。谢谢。

【问题讨论】:

  • 一次写入一个字节可能非常低效。我建议一次写入数据块。例如512 字节到 32KB。
  • 同样的问题。这就是我尝试这种方法的原因。
  • 在任何一种情况下,您都需要确保正在刷新数据。
  • “bytestoread”从何而来?
  • 它在发送所有数据之前打印出传入数据的大小,文件大小。

标签: java sockets byte datainputstream dataoutputstream


【解决方案1】:

写完后,你需要调用flush来确保字节真的被发送了。

Connection.data.flush();

来自文档:

刷新此数据输出流。这会强制任何缓冲的输出字节 写出到流中。

DataOutputStream的flush方法 调用其底层输出流的 flush 方法。

【讨论】:

  • 不,不是那样。仍然可以成功写入,但它会读取并停止大约 100-10 个字节直到结束。
猜你喜欢
  • 2013-11-01
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多