将字节数组转换为java类型
Convert the byte array to java types
我有一个非常具体的要求。我有一个java应用程序,我需要将字节数组转换为java类型的消息,比如int, String。消息的结构在c++中定义如下-
struct SMSMessage{
int id;
std::string name;
std::string source;
std::string destination;
std::string timestamp;
int type;
int status;
std::string message;
int mesg_type;
int mesg_sub_type; };
我在java应用程序中收到的是字节数组。我不知道c++应用程序是否使用原型缓冲区或任何其他方式转换为字节数组。但是,如果我一个字节一个字节地解析数组,我就能得到值。例如-
ByteBuffer.wrap(Arrays.copyOfRange(byteArray, 0, 4)).getInt();
//byteArray -- reference to the incoming byte array
// 0, 4-- range of bytes for integer type
这一行将返回正确的id值(结构中的第一个属性是int)。
我的问题是如果我写这个结构的原型,我能把这个消息解析成java吗?
是否有其他方法将字节数组转换为java类型?(不使用库,如google protobuf)
我不确定是否可以将其直接转换为java结构,但我猜这并不容易。此外,如果它工作,您不能确定数据类型的大小是相同的。如果你在不同的机器上运行c++应用程序和Java应用程序,那么它的大小就会不同。
所以在我看来,最好的选择是你先把它写进json或xml文件,然后从其他应用程序读取它。
如果你想像你已经写过的那样做,那么也许你应该按类型对c++结构体进行排序。所以你可以更好地使用循环。例如,我有5倍的4字节整数和5倍的X字节字符串。
有限公司
您可以使用开源javution库,特别是查看Struct类,它为直接将C结构映射到Java类型提供了一些支持。
在映射std::string类型时会遇到问题,因为事先不知道字符串的长度。您需要将其作为字节流读入,直到找到表示字符串结束的空结束符。
相关文章:
- Java 中是否有类似于 C++ 中引用类型"&"的内容?
- 具有相同数据类型代码的相同逻辑代码在 Java 中传递,但不在 C++ 中传递?
- 在C++中返回基元类型数组(Java比较)
- 如何在本机 c++ jni 中实现 java 类型数组
- Java 调用 dll 字符串返回类型方法
- RSA_verify中预期的数据类型是什么,无法验证从 Java 生成的签名
- JNI 如何将 Java 对象数组传递给相同对象类型的 C++ 数组
- Swig:如何将"FILE"类型从 C++ 传递给 Java
- Java 类型的枚举,C++中的自定义值和构造函数
- 使用正确的数据类型转换java中的c++方法逻辑
- jvm在尝试将TCHAR类型发送到接受字符串作为参数的java函数时崩溃
- 为什么 C++ 和 Java 中的构造函数调用需要显式类型参数
- 使用java jni时转换字符串类型
- 为什么Java和C++中的数据类型大小不同
- 您将如何为 std::list<std::string> 创建一个类型映射,以在<String> List in C++ 中为 Java 在 SWIG 中创建?
- 内置于c++/python/java中的抽象数据类型
- 使用JNA将const char**映射到Java类型
- C++中是否有类似于 Java 的 CompareTo 方法,您可以在其中对数据类型使用 > < = 操作
- 将 QByteArray 反序列化为 Java 数据类型
- 将字节数组转换为java类型