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

Java-如何将512字节的文件发送到客户端(使用FileInputStream?),java,file,networking,fileinputstream,Java,File,Networking,Fileinputstream,我需要将数据包发送到客户机,并且我需要将它们作为512字节的块发送(最后一个数据包可以小于512字节)。 我的服务器文件夹中有一个文件,但我不确定如何读取512字节的文件块,以便将它们插入字节数组并发送到客户端。 我还需要记住上次停止的位置(文件中的当前字节位置),以便我知道从何处读取数据,以便生成下一个数据包 我找到了一个解决方案,但我认为它不好: FileInputStream fin=新的FileInputStream(“文件名”) 字节[]newPacketByteArray=新字节[5

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

我找到了一个解决方案,但我认为它不好:

FileInputStream fin=新的FileInputStream(“文件名”)

字节[]newPacketByteArray=新字节[512]

fin.read(新包装比阵列)

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

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

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

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

  • Eclipse对我大喊大叫(该方法中的黄色符号),因为只有当客户端接收到所有数据包时,我才关闭fileInputStream


  • 非常感谢您的帮助

    为什么您需要自己管理数据包拆分和发送接收确认?您可以使用
    Socket
    API为您处理它。有关详细信息,请参阅。