gpt4 book ai didi

java - FileOutputStream 无法正确写入非 .txt 文件

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

出于某种原因,我的 FileOutputStream 只能正确写入 .txt 格式的文件。这些字节是通过 UDP 从另一台服务器接收的,但它是通过本地主机接收的,所以我认为数据包不会丢失。任何人都可以看到什么会导致非 .txt 字节写得不好?您认为问题可能出在服务器发送字节上吗?如果它来自发送服务器,我会感到惊讶,因为它为 .txt 文件写入了正确的字节。

public class CompressionServer {

private static final int ECHOMAX = 65535; // Maximum size of UDP packet

public static void main(String[] args) throws IOException {

int servPort = Integer.parseInt(args[0]);

DatagramSocket socket = new DatagramSocket(servPort);
DatagramPacket packet = new DatagramPacket(new byte[ECHOMAX], ECHOMAX);

for (;;) { // Run forever, receiving and echoing datagrams
socket.receive(packet);
byte[] data = packet.getData();
String fileName = new String(data, 0, packet.getLength());

FileOutputStream fout = new FileOutputStream(fileName.trim()); //unzipped file output
FileOutputStream fout2 = new FileOutputStream(fileName.trim() + ".zip"); //zipped file output
ZipOutputStream zout = new ZipOutputStream(fout2); //I guess this writes zip bytes to fout2?

ZipEntry entry = new ZipEntry(fileName.trim()); //call the entry in the zip file "proj3.bin"
zout.putNextEntry(entry); //the next entry our ZipOutputStream is going to write is "proj3.bin"

while(true) {
socket.receive(packet);
data = packet.getData();
String magicString = new String(data, 0, packet.getLength(), "US-ASCII");
int index = magicString.indexOf("--------MagicStringCSE283Miami");
if(index != -1){
fout.write(data, 0, index);
fout.flush();
fout.close();

zout.write(data, 0, index); //write the byteBuffer's data to the client via the zip output stream
zout.flush(); //push all data out of the zipOutputStream before continuing
fout2.flush();
zout.close();
fout2.close();
break;
}
//System.out.println("packet received");
fout.write(packet.getData(), 0, packet.getLength());
fout.flush();

zout.write(data, 0, packet.getLength()); //write the byteBuffer's data to the client via the zip output stream
zout.flush(); //push all data out of the zipOutputStream before continuing
fout2.flush();
}
}
//socket.close();
}
/* NOT REACHED */
}

最佳答案

FileOutputStream not properly writing non-.txt files

这当然不是 FileOutputStream 的问题。你让它写什么它就写什么。然而,在接近 FileOutputStream: 之前,有太多方法可能会损坏数据。

  1. 您尚未显示发送代码。
  2. String不是二进制数据的容器。
  3. “来自另一台服务器”和“通过本地主机”是相互矛盾的,它们都不能保证 UDP 数据报的传送、不重复或排序。如果没有基于 ACK 或 NACK 的协议(protocol),这将无法正常工作。
  4. UDP 数据报的最大有效负载大小为 65507 字节,这仍然非常不切实际。普遍接受的可用最大值为 534 字节。
  5. 冲洗和关闭fout2当您已经冲水或关闭时 zout是多余的,并且冲洗zout关闭之前也是多余的。

关于java - FileOutputStream 无法正确写入非 .txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29738812/

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