gpt4 book ai didi

java - 查看用java中的套接字传输的文件时发生奇怪的事情

转载 作者:行者123 更新时间:2023-12-02 07:27:01 25 4
gpt4 key购买 nike

我正在尝试使用java中的套接字传输文件

这是代码

客户端代码

try{
// get streams
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream din = new DataInputStream (socket.getInputStream());
dos.writeUTF(fileName);
dos.flush();

boolean isOk = din.readBoolean();
if(!isOk){
throw new StocFileNotFound("Fisierul: " + fileName +" was not found on:" + address.toString());
} else {
baos = new ByteArrayOutputStream();
byte biti [] = new byte[1024];

while(din.read(biti,0,1024) != -1){
baos.write(biti,0,biti.length);
}
}

}
catch(IOException e){}
finally {
try{ socket.close(); } catch (IOException e){}
}

然后我返回 baos.toByteArray() 并使用 OutputStream 的 write 方法将其写入文件。

服务器代码

try{
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
DataInputStream din = new DataInputStream (socket.getInputStream());

// check if it is really a file or if it is an existing file
File file = new File(din.readUTF());

// write false
if ( !file.exists() || !file.isFile() ){
dos.writeBoolean(false);
dos.flush();
}

// write true and write the file
else {
byte biti[] = new byte[1024];
dos.writeBoolean(true);

FileInputStream fis = new FileInputStream(file);

while(fis.read(biti,0,1024) != -1){
dos.write(biti,0,biti.length);
}

dos.flush();

try{ fis.close(); } catch (IOException e){}

}

} catch (IOException e){}
finally {
try{socket.close();}catch(IOException e){}
}

问题

当我传输 .txt 文件并在 gedit 中查看它时,它会显示文本,后跟多个 \00\00\00,虽然当我使用记事本(在wine中)打开它时,它只显示文本。另外,查看图像和 .doc 也可以。那么是 gedit 的问题还是我的程序的问题?

编辑我发送的内容类似于“嗨,希望它有效!”

最佳答案

这就是问题(或者至少问题):

while(fis.read(biti,0,1024) != -1)
{
dos.write(biti,0,biti.length);
}

无论实际读取了多少字节,您总是写出整个缓冲区。你应该有:

int bytesRead;
while ((bytesRead = fis.read(biti, 0, 1024)) != -1)
{
dos.write(biti, 0, bytesRead);
}

(您在两段代码中都遇到了相同的问题。)

您可能想查看Guava它具有各种实用方法,可以帮助您摆脱一遍又一遍编写此类代码的繁琐(以及可能的错误)。

关于java - 查看用java中的套接字传输的文件时发生奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com