如
struct {
char a[3];
int i;
char b[5];
char c[2];
};如果是按四字节对齐的话,那么上面这个结构体就是20字节大小了。在java中如果要和C使用对齐方式来传递这个结构,JAVA中应该如何补齐?难道定义一个:class {
byte[] a = new byte[4];
int i;
byte[] b = new byte[8];
byte[] c = new byte[4];
}只能这样手工来补齐吗?
struct {
char a[3];
int i;
char b[5];
char c[2];
};如果是按四字节对齐的话,那么上面这个结构体就是20字节大小了。在java中如果要和C使用对齐方式来传递这个结构,JAVA中应该如何补齐?难道定义一个:class {
byte[] a = new byte[4];
int i;
byte[] b = new byte[8];
byte[] c = new byte[4];
}只能这样手工来补齐吗?
2. C中结构体的字节对齐与编译器有关。
3. 没注意过Java中是否有字节对齐,应该有吧,毕竟为了访问速度,如果没有,还真只有自己处理了。
4. 为了实现C与Java的通讯,还是自己定义一个通讯格式,C收到Java的数据后,再解析成自己的结构体。
Java通常是通过序列化serialize来将对象转换为字节数组,不是手工处理的
java不存在对不对齐的问题,java连sizeof都没有,所以这些是JVM操心的事情,应用程序员不需要关心。
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;这两个方法的。所以这种形为只是在传输对象时有用,而且对方必需是用同样方法反序列化得到这个对象。但我现在是java与c等进行socket通讯。如何指定字段的值传送呢?
貌似java.io.Externalizable可以自定义序列化不过我认为照你这样做java与c通信应该是不行的,因为数据类型的表示方法都不一样
比如说String,在C里就是一个字符数组,但是在java里面是一个对象,两者的二进制不是等效的所以,我觉得应该使用JNI来做