我需要将数据包发送到客户端,我需要将它们作为512字节的块发送(最后一个数据包可以小于那个)。 我的服务器文件夹上有一个文件,但我不知道如何以512字节的块读取此文件,因此我可以将它们插入到字节数组中并将它们发送到客户端。 我还需要记住上次停止的位置(文件中的当前字节位置),以便我知道从哪里读取数据以便生成下一个数据包。
我找到了一个解决方案,但我认为这很糟糕:
FileInputStream fin = new FileInputStream(“filename”)
byte [] newPacketByteArray = new byte [512];
fin.read(newPacketByteArray);
现在主要问题是,我不会关闭FileInputStream,直到客户端收到所有数据包,这是因为我只发送下一个数据包,当客户端回复他得到我的第n个数据包时,所以同时这一次FileInputStream保持打开状态,因为如果我将关闭它,我将不知道如何到达最后一个字节位置(我没有在fileInputStream API中看到任何选项到达特定位置)。
我只有在客户告诉我他收到了最后一个数据包后才关闭它。 几个问题:
如果我的解决方案没问题,请回答:
如果很少有客户希望获得相同的文件,并且很少有FileInputStream对象读取此文件(可能同时),是否会导致任何问题?
Eclipse正在大喊大叫(该方法中有黄色标志),因为如果客户端收到所有数据包,我只会关闭fileInputStream
非常感谢您的帮助