java - Java - 将文件从客户端复制/粘贴到服务器出现错误 - UTF-8 编码问题打开文件
问题描述
我最近尝试使用此答案使用 Java 创建一个复制/粘贴应用程序,除了文件目录之外我没有进行太多更改。我创建了一个常规文本文件,其中写有“测试”。当我运行应用程序时,它会复制文件,但在 success_test.txt 中给我一个关于 utf-8 编码的错误,我不确定如何解决这个问题或导致问题的原因。我在 Intellij Ultimate 2019.2 的 Ubuntu 18.04 上运行它
这是服务器,客户端与答案中的几乎相同
服务器:
public class Server extends Thread {
public static final int PORT = 3332;
public static final int BUFFER_SIZE = 626;
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
Socket s = serverSocket.accept();
saveFile(s);
}
} catch (Exception e) {
}
}
private void saveFile(Socket socket) throws Exception {
InputStream inputStream = socket.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream("/home/user/Documents/success_test.txt");;
byte[] byteArray = new byte[1024];
System.out.println("Reading file from server...");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
int bytesRead;
while ((bytesRead = inputStream.read(byteArray)) != -1) {
bufferedOutputStream.write(byteArray);
}
bufferedOutputStream.close();
System.out.println("Writing file complete...");
}
public static void main(String[] args) {
new Server().start();
}
}
当我尝试打开 success_test.txt 这就是我看到的
解决方案
您正在将数据读入一个 1024 字节长的数组,然后将其写入文件。这意味着您的输出文件使用 NULL 字符填充到 1024 个字节。
你有你的 bytesRead 变量,所以你应该用它来只写那么多字节:
bufferedOutputStream.write(byteArray, 0, bytesRead);
推荐阅读
- python - 与树莓派和 arduino 的 I2C 通信问题
- azure - 如何从 Azure 环境中获取 PowerShell Az 模块版本
- latex - 表格单元格内的项目符号列表
- mysql - ESP8266 和 mySQL
- git - 使用 http://username:password@server 的 Git Pull 仍然要求提供凭据?
- java - 将字符串数组返回到其他类(包括继承)并打印
- c# - 这是火与遗忘?(Linq 到 SQL)
- python - 困惑为什么在应用 pd.to_numeric 时列不会更改为数字类型
- html - 如何将 div 排列成两行三列,由偶数和奇数子分隔?
- rust - 我应该如何在 rust 中强制执行 jsonwebtokens 的反序列化类型?