Java - 如何以512字节的块发送文件到客户端(使用FileInputStream?)

时间:2017-01-14 19:46:41

标签: java file networking fileinputstream

我需要将数据包发送到客户端,我需要将它们作为512字节的块发送(最后一个数据包可以小于那个)。 我的服务器文件夹上有一个文件,但我不知道如何以512字节的块读取此文件,因此我可以将它们插入到字节数组中并将它们发送到客户端。 我还需要记住上次停止的位置(文件中的当前字节位置),以便我知道从哪里读取数据以便生成下一个数据包。

我找到了一个解决方案,但我认为这很糟糕:

FileInputStream fin = new FileInputStream(“filename”)

byte [] newPacketByteArray = new byte [512];

fin.read(newPacketByteArray);

现在主要问题是,我不会关闭FileInputStream,直到客户端收到所有数据包,这是因为我只发送下一个数据包,当客户端回复他得到我的第n个数据包时,所以同时这一次FileInputStream保持打开状态,因为如果我将关闭它,我将不知道如何到达最后一个字节位置(我没有在fileInputStream API中看到任何选项到达特定位置)。

我只有在客户告诉我他收到了最后一个数据包后才关闭它。 几个问题:

  1. 这是一个糟糕的解决方案吗?如果是,从我的服务器中的文件读取512字节的块并将它们插入byte []数组的最佳方法是什么?请记住,我需要知道上次停止的位置(文件中下一个字节的位置),以便我可以发送下一个新数据包。
  2. 如果我的解决方案没问题,请回答:

    1. 如果很少有客户希望获得相同的文件,并且很少有FileInputStream对象读取此文件(可能同时),是否会导致任何问题?

    2. Eclipse正在大喊大叫(该方法中有黄色标志),因为如果客户端收到所有数据包,我只会关闭fileInputStream

    3. 非常感谢您的帮助

0 个答案:

没有答案