C# 等效于 Java 中的 ByteArrayOutputStream

标签 c# java windows-phone-8 stream

我有 java 代码作为

ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(tokenBytes);
baos.write(signedData);
byte[] finalout = baos.toByteArray();

其中 tokenBytes 和 signedData 是字节数组。在 c# 中我写成

 using (MemoryStream stream = new MemoryStream())
        {
            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                writer.Write(tokenBytes);
                writer.Write(signature);
            }
            finalBytesToSend = stream.ToArray();

        }

其中 tokenBytes 、 signature 和 finaleBytesToSend 是字节数组。

是否正确?或者还有其他方法吗?

最佳答案

我假设您正在编写 Java-C# 序列化方案。我认为您可能需要注意 3 件事:

  1. Java 字节数组输出可能在末尾包含特殊的分隔符。
  2. 如果字节数组中的数据最初不是字节,则 Java 默认使用 Big-Endian 编码;而 C# 默认是 Little Endian 编码。
  3. 对于字符串,Java 使用 UTF-16 (Big Endian),而 C# UTF-16 默认是 Little Endian。

在我看来,如果要在 Java 和 C# 之间传输数据,最好在 Java 端使用 ByteBuffer,在 C# 端使用 MemoryStream/BinaryReader/BinaryWrite。在 C# 端正确设置 UTF-16 Big Endian,并为诸如 int/long/double 基元之类的东西编写自己的反序列化程序。这使它起作用。

关于C# 等效于 Java 中的 ByteArrayOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22062521/

相关文章:

c# - 在 asp.net 中的同一服务器上下载应用程序根文件夹之外的文件

c# - c#中字符串比较的更快算法

java - 即使 ScheduledFuture 被取消,ThreadPoolExecutor 也会运行

java - 通过同一个套接字发送多条消息不起作用

c# - MouseEnter 事件的奇怪行为

c# - XML 文档的 NullReferenceException

windows-8 - 使用 Proximity API 与许多 Windows/Windows Phone 8 设备同时通信

c# - 使用 LINQ 从不同的组中选择重复值

javascript - 为什么我的 JavaScript 在使用 Blazor 时不能正确呈现?

java - 使用字符串消息检查 sysout 为空