我准备与win平台下的C程序通信,建立Socket链接后,发送一系列数据(包括几个long型数据和几个字符串),我想把它们封装在一个对象中,将对象序列化后传输。但这样C程序部分能接收并分析出来它们吗?有其它的方法吗??谢谢

解决方案 »

  1.   

    Java和C通信只能是字节级的,即将你要发送的数据先变成字节(byte),然后再发送。注意Java中的long占8个字节,每个字符占两个字节
    如果是C和Java通信的话,JNI也可以考虑
      

  2.   

    C里没有对象,所以我认为你不可能传一个对象过去,byte应该是最为合理的。
    java中的数据类型和C里的数据类型也有很大的区别。
      

  3.   

    在java的inputStream、outputStream流中,java将输入的数据、字符串按默认编码自动转换为字节流了,需要对它们再做处理吗?还是C程序部分独自处理
      

  4.   

    但是,如何将一个对象转化为一个Byte[]的数组呢?——我遇到的问题和楼主的相反,我是从c的socket通讯层接收一个数据包,接到后传给上层用java语言处理,我又如何把一个byte[]的数组转化为我所需要的对象呢?象大家请教!
      

  5.   

    我认为 byte[]就已经可以了阿
    因为 在java中对象的reference可以理解为我们所说的地址指针,
    那么byte[]这个连续的内存空间正好符合了我们所要的存储格式,
    在上层的java平台下定义好对象属性的读取顺序,然后再接受底层
    传上来的内存地址,就好像得到了一个对象的引用,那么java就会
    按照他的方法去读你所写的byte[]吧
    对于outputstream等方法生成的字节留我没有具体看过所以还不清楚,
    请高手多多指教。
      

  6.   

    我这边也会有接收C传输的数据流,对于这个数据流按照事先双方协商好的格式,java依次从流中读取不同类型的long、String是否可以?请高手多多指教。
      

  7.   

    如果你CSocket和java.net.*通信这个是不会有问题的。当然用byte传输是最好的,在int方面也没有必要转换,CSocket和java.net.*里面已经做了处理不需要用户的特别处理。如果你要做些低层协议的应用就必须把host顺序和network顺序互换,对不同的操作系统有不同的处理。
      

  8.   

    测试结果是:不能用对象流,C解析不了。像一般传输一样使用DataInputStream、PrintWriter都可,C端接收数据、字符串正常。
      

  9.   

    如果C以默认的格式发过来,一般用new String(ret.getBytes(),"iso8859-1");用iso8859-1的编码就能正确显示出中文。