gpt4 book ai didi

java - 我可以将二进制文件添加到基于字符串的服务器消息队列吗?

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

我有一个多线程客户端-服务器应用程序,它使用 Vector<String>作为queue of messages发送。

但是,我需要使用此应用程序发送文件。在 C++ 中我不会真正担心,但在 Java 中我在将任何内容转换为字符串时有点困惑。

Java 有 2 个字节字符。当你看到十六进制的 Java 字符串时,它通常是这样的:

00XX 00XX 00XX 00XX

除非存在某些 Unicode 字符。

Java 也使用 Big endian。

这些事实让我不确定是否以及最终如何将文件添加到队列中。文件的首选格式是:

-- Headers --
2 bytes Size of the block (excluding header, which means first four bytes)
2 bytes Data type (text message/file)
-- End of headers --
2 bytes Internal file ID (to avoid referring by filenames)
2 bytes Length of filename
X bytes Filename
X bytes Data

您可以看到我已经对所有数字使用了 2 个字节,以避免从一个字符中获取 2 个数字时所需的一些可怕的操作。

但我真的不知道如何正确添加文件数据。对于数字,我认为这样做可以:

StringBuilder packetData = new StringBuilder();
packetData.append((char) packetSize);
packetData.append((char) PacketType.BINARY.ordinal()); //Just convert enum constant to number

但是文件确实是个问题。如果我对 Java 数据类型的描述有任何错误,请纠正我 - 我是初学者。

最佳答案

是否必须只发送String?我认为如果确实如此,那么您确实需要使用 base64 或类似的方法对其进行编码。总体而言,最好的方法可能是将其作为原始字节发送。根据重构代码以支持字节数组而不仅仅是字符串的难度,这可能是值得做的。

为了回答我刚刚在评论中看到的 String 问题,String 上有一个 getBytes 方法。

有关套接字问题,请参阅: Java sending and receiving file (byte[]) over sockets

关于java - 我可以将二进制文件添加到基于字符串的服务器消息队列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23819786/

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