【发布时间】:2012-03-24 04:56:23
【问题描述】:
我知道如何按字节读取文件,但找不到如何按字节块读取文件的示例。我有一个字节数组,我想按 512 字节读取文件并通过套接字发送它们。
我尝试读取文件的总字节数,然后减去 512 字节,直到我得到一个小于 512 字节的块并发出 EOF 和传输结束信号。
我正在尝试实现一个 TFTP,其中数据以 512 字节块的形式发送。
无论如何都会感谢一个例子。
【问题讨论】:
标签: java sockets io inputstream
我知道如何按字节读取文件,但找不到如何按字节块读取文件的示例。我有一个字节数组,我想按 512 字节读取文件并通过套接字发送它们。
我尝试读取文件的总字节数,然后减去 512 字节,直到我得到一个小于 512 字节的块并发出 EOF 和传输结束信号。
我正在尝试实现一个 TFTP,其中数据以 512 字节块的形式发送。
无论如何都会感谢一个例子。
【问题讨论】:
标签: java sockets io inputstream
使用InputStream,您可以读取给定大小的数组并将读取限制为该大小。
在这里阅读:http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html
【讨论】:
您可以从输入流中使用适当的read() 方法,例如FileInputStream 支持read(byte[]) 来读取一大块字节。
类似:如果您想保证 512 字节块(构造函数采用块大小参数),您可能希望将输入流包装在 BufferedInputStream 中。
byte[] buffer = new byte[512];
FileInputStream in = new FileInputStream("some_file");
int rc = in.read(buffer);
while(rc != -1)
{
// rc should contain the number of bytes read in this operation.
// do stuff...
// next read
rc = in.read(buffer);
}
【讨论】:
你……一次读取 512 个字节。
char[] myBuffer = new char[512];
int bytesRead = 0;
BufferedReader in = new BufferedReader(new FileReader("foo.txt"));
while ((bytesRead = in.read(myBuffer,0,512)) != -1)
{
...
}
【讨论】: