Eli*_*zer 5 java io networking bytebuffer
我正在实现文件传输服务器,我遇到了通过网络发送大于2 GB的文件的问题.当我得到File我想要使用并尝试将其内容读入a 时,问题就开始了byte[].我有一个for循环:
for(long i = 0; i < fileToSend.length(); i += PACKET_SIZE){
fileBytes = getBytesFromFile(fileToSend, i);
Run Code Online (Sandbox Code Playgroud)
其中getBytesFromFile()读取一个PACKET_SIZE字节数fileToSend,然后在for循环中将其发送到客户端.getBytesFromFile()使用i作为偏移; 但是,偏移量变量FileInputStream.read()必须是int.我确定有更好的方法将这个文件读入数组,我还没有找到它.
我宁愿不使用NIO,虽然我将来会改用它.放纵我的疯狂:-)
您似乎没有正确从文件中读取数据。在 Java 中从流中读取数据时,标准做法是将数据读入缓冲区。缓冲区的大小可以是您的数据包大小。
File fileToSend = //...
InputStream in = new FileInputStream(fileToSend);
OutputStream out = //...
byte buffer[] = new byte[PACKET_SIZE];
int read;
while ((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
in.close();
out.close();
Run Code Online (Sandbox Code Playgroud)
请注意,缓冲区数组的大小保持不变。 但是 -如果缓冲区无法填充(例如当它到达文件末尾时),则数组的其余元素将包含最后一个数据包中的数据,因此您必须忽略这些元素(这就是out.write()我的代码中的行)样品确实)
| 归档时间: |
|
| 查看次数: |
2038 次 |
| 最近记录: |