我正在尝试编写一个迷你 FTP 应用程序,它从文件中读取二进制数据并将其发送到客户端。我的程序通常不会按预期运行,通常会发送文件,但不会完全发送(即发送文本文件,内容为空白)。我认为这可能是因为我使用文件阅读器来读取该行,尽管我不太明白为什么这会成为一个问题。 相关代码如下:
File file = new File(rootDirectory, name);
int filenum = (int)file.length();
long filelen = file.length();
System.out.println("File is: " + filenum + " bytes long");
socketOut.writeLong(filelen);
fileIn = new BufferedReader(new FileReader(file));
System.out.println("Sending: " + name);
while((line = fileIn.readLine()) != null){
socketOut.writeBytes(line);
socketOut.flush();
}
最佳答案
问题在于读者/作者读取文本(与 Input~/OutputStreams 相对)。 FileReader 内部使用默认的操作系统编码。这种转换永远不会对二进制文件进行。另请注意,readLine 会丢弃行结尾(\r\n
、\n
或 \u0085
)。从 Java 7 开始,你可以做
Files.copy(file.toPath(), socketOut);
而不是 wile 循环。
关于Java 从文件中读取并使用 DataOutputStream 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23530127/