C# 和 Android/Java - 跨语言二进制流编写器/读取器? (对于原语和 UTF-8 字符串)

标签 c# java android primitive binary-serialization

在 C# 和 Android 的 Java 之间对某些自定义数据进行二进制序列化/反序列化的最简单方法是什么?我想为 Java 找到类似于 C# BinaryWriter 和 BinaryReader 的东西 - 它支持编写原语(如 uint16)和 UTF-8 字符串。

或者也许有更好的方法?

编辑:编译时不知道数据结构

示例写入:

        BinaryWriter w = new BinaryWriter(File.OpenWrite(@"D:\data"));
        w.Write((UInt16)1234);
        w.Write("To jest żółwiątko");
        w.Write((UInt16)4567);

最佳答案

在 Java 中,所有原始类型都是有符号的(奇怪的是,甚至是字节!)。因此,如果您想在 Java 中使用 DataInputStream.readInt() 读取有符号整数,则需要写出它们。 。另请注意,readInt() 使用大端字节序。您可以使用 Jon Skeets MiscUtils 的 EndianBinaryReader 之类的东西编写这些内容以便可以在 Android 上读取。

UTF-8 有点棘手,因为 DataInputStream 使用称为 MUTF-8(修改版 UTF-8)的字符串编码。在我们用来在 android 和 .net 之间共享数据的代码中,我们使用简单的游程编码的 UTF-8 字节来表示字符串(-1 为空)。我们在 Java 中的 reader 方法看起来像这样,从 C# BinaryWriter 读取标准 UTF-8 编码的字符串(在第一次写出 Int16 长度之后):

public String readUTF8String() throws ImageFileFormatException, IOException
 {
     short len = readInt16();
     if (len == -1)
         return null;
     if (len == 0)
         return "";
     if (len < -1)
         throw new ImageFileFormatException("Invalid UTF8 string");
     byte[] utf8Bytes = readBytes(len);
     return new String(utf8Bytes, "UTF-8");
 }

关于C# 和 Android/Java - 跨语言二进制流编写器/读取器? (对于原语和 UTF-8 字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7236813/

相关文章:

java - RecyclerView 项目中的 ProgressBar 未在 notifyDataSetChanged 上设置动画

java - 尝试在回收者 View 中实现搜索

c# - 在 C# 中打开或转换 webarchive 文件

c# - 无法使用C#下载docx文件

c# - 如何在 foreach 循环中验证元素是否在集合中的最后一个?

java - ClassCast 异常无法将字符串转换为 boolean 值

c# - while循环运行时如何按下按钮?

java - 更改 WSDL xsd :complexType name with Apache CXF

java - JavaFX 中 ImageView 的交集

android - 无法制作仅限平板电脑的应用程序