gpt4 book ai didi

java - 将文件从设备发送到计算机不起作用(文件损坏)

转载 作者:行者123 更新时间:2023-12-02 10:38:43 25 4
gpt4 key购买 nike

我目前正在使用此代码将文件从我的电脑发送到另一台电脑。

接收者:

    String filename = "";
Socket socket;
DataInputStream din;
DataOutputStream dout;
BufferedReader br;
FileOutputStream fos;

try{
ServerSocket serverSocket = new ServerSocket(5000);
while(true) {
socket = serverSocket.accept();

din = new DataInputStream(socket.getInputStream());
dout = new DataOutputStream(socket.getOutputStream());

filename = din.readUTF();

String[] splitname = filename.split(Pattern.quote("/"));
String realfile = splitname[splitname.length -1];

long sz = Long.parseLong(din.readUTF());

BufferedInputStream get = new BufferedInputStream(socket.getInputStream());

//Speicherort (Config?)
fos = new FileOutputStream(new File(System.getProperty("user.home") + "/Send/Empfangen/" + realfile),true);


long u;
byte bb[]= new byte [1024];
long bytesRead;
do
{
bytesRead = din.read(bb, 0, bb.length);
fos.write(bb,0,bb.length);

}while(!(bytesRead<1024));
fos.close();
dout.close();
socket.close();
}

}catch(Exception ex) {
ex.printStackTrace();

}

发件人:

    Socket soc;
DataOutputStream dc;
PrintWriter pw;
String msg = "";
try{
msg = "test.png";

soc = new Socket("IP", 5000);

dc = new DataOutputStream(soc.getOutputStream());

//Filename
dc.writeUTF(msg);
dc.flush();

File fi = new File(msg);

long size = (int) fi.length();

//Size of file
dc.writeUTF(Long.toString(size));
dc.flush();

byte[] bytes = new byte[1024];
FileInputStream in = new FileInputStream(fi);
OutputStream out = soc.getOutputStream();

int count;
while ((count = in.read(bytes)) > 0) {
out.write(bytes, 0, count);
}

out.close();
in.close();
soc.close();

}catch(Exception ex){
ex.printStackTrace();
}

如果我这样使用它,我可以将任何文件从我的笔记本电脑发送到我的台式电脑。但是当我将此代码复制到我的应用程序并从我的设备发送文件时,它会坏掉。 PDF 仅包含一半的文本,图像仅占其外观的四分之一。

例如个人资料图片:

这就是我手机上的样子。我将其发送到我的计算机后,它看起来像这样:

所以它现在完全崩溃了。

为什么从 PC 到 PC 可以,但从 Android 到 PC 却不行?有什么办法可以让它工作吗?

感谢您的回答;)

最佳答案

服务器代码逻辑的一个错误是您假设 InputStream.(byte[], int, int) 将始终读取您在第三个参数中指定的字节数,但事实并非如此( read here )。

更改这部分:

        long bytesRead;
do
{
bytesRead = din.read(bb, 0, bb.length);
fos.write(bb,0,bb.length);

}while(!(bytesRead<1024));

到此

        int bytesRead;
while((bytesRead=din.read(bb))>-1){
fos.write(bb,0,bytesRead);
}

关于java - 将文件从设备发送到计算机不起作用(文件损坏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53089577/

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