如何在不同编程语言中共享二进制文件?
今天试图使用Java和QT C++读写同一个二进制文件时发现的一个问题。
在网络流中,有magpack、proto等library可以让不同编程语言实现的程序互通消息。
但是落实到二进制文件中,比如将一个C结构体以二进制写入到文件中去,那么java是无法读写的,因为C的数据位数、排列都与Java不同。
那么,是否有这种问题的解决方案吗?
PS:有点理解Android和IOS数据不互通了。
回答:
不,你不理解,这是两码事
所谓Android和iOS数据不互通是一个商业问题,跟技术无关
至于为什么会有不同语言读写不一致的情况是因为 c 编译器有Data Alignment的优化,是可以关闭的,Java,C# 之类托管语言提供的类似 ByteArray 这样的类是以字节为单位操作的,如果按统一规则读写就不会有任何问题,这就是为什么会有大小端这种约定
回答:
大多数语言都支持二进制文件的读写,但规则不尽相同。不过都有合适的解析处理规则办法来保障读写是通用的。
这里注意这里所谓的规则是一种数据处理的约定,而没有完全统一的要求。
还要注意,数据的组织规则是由写方决定的,你只有按写时的规则来解析才能正确解析,不同语言(系统)对二进制流的处理其实是不同的,所以在处理是尤为需要注意。
如果是某种具体的内存对象存储到文件中,再读取出来,专业术语叫数据的序列化(存储)和反序列化这样两个过程。这在数据交换、存储中是经常可能遇到的问题。
你现在出现的情况实质是你用C写的二进制文件,在java去读时没有按照C的规则去读,而是期望直接用java的一些规则去读,这确实很可能返回错误的结果,但如果你在java语言中构造合适的处理过程,也按C写入的规则去读,是可以正确解析的。所以并不是这两种语言写的二进制数据文件不能互相解析,只是你没有掌握正确的方法。更不是Android与IOS的数据不能互通,从一定程度上来说,它们肯定是可以互通的,比如你Android下发一个视频文件给IOS,在IOS上也是可以播放来看的,反之也然,这里的视频文件就是一种二进制文件,它很可能是用C语言程序生成,也可以在IOS下用java程序来解析播放。
以上是 如何在不同编程语言中共享二进制文件? 的全部内容, 来源链接: utcz.com/p/944401.html