向大侠们求救:java使用Socket和win平台下的C程序通信,传输的信息包括数据、字符串,应该怎么进行??用对象流可以吗?? 我准备与win平台下的C程序通信,建立Socket链接后,发送一系列数据(包括几个long型数据和几个字符串),我想把它们封装在一个对象中,将对象序列化后传输。但这样C程序部分能接收并分析出来它们吗?有其它的方法吗??谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Java和C通信只能是字节级的,即将你要发送的数据先变成字节(byte),然后再发送。注意Java中的long占8个字节,每个字符占两个字节如果是C和Java通信的话,JNI也可以考虑 C里没有对象,所以我认为你不可能传一个对象过去,byte应该是最为合理的。java中的数据类型和C里的数据类型也有很大的区别。 在java的inputStream、outputStream流中,java将输入的数据、字符串按默认编码自动转换为字节流了,需要对它们再做处理吗?还是C程序部分独自处理 但是,如何将一个对象转化为一个Byte[]的数组呢?——我遇到的问题和楼主的相反,我是从c的socket通讯层接收一个数据包,接到后传给上层用java语言处理,我又如何把一个byte[]的数组转化为我所需要的对象呢?象大家请教! 我认为 byte[]就已经可以了阿因为 在java中对象的reference可以理解为我们所说的地址指针,那么byte[]这个连续的内存空间正好符合了我们所要的存储格式,在上层的java平台下定义好对象属性的读取顺序,然后再接受底层传上来的内存地址,就好像得到了一个对象的引用,那么java就会按照他的方法去读你所写的byte[]吧对于outputstream等方法生成的字节留我没有具体看过所以还不清楚,请高手多多指教。 我这边也会有接收C传输的数据流,对于这个数据流按照事先双方协商好的格式,java依次从流中读取不同类型的long、String是否可以?请高手多多指教。 如果你CSocket和java.net.*通信这个是不会有问题的。当然用byte传输是最好的,在int方面也没有必要转换,CSocket和java.net.*里面已经做了处理不需要用户的特别处理。如果你要做些低层协议的应用就必须把host顺序和network顺序互换,对不同的操作系统有不同的处理。 测试结果是:不能用对象流,C解析不了。像一般传输一样使用DataInputStream、PrintWriter都可,C端接收数据、字符串正常。 如果C以默认的格式发过来,一般用new String(ret.getBytes(),"iso8859-1");用iso8859-1的编码就能正确显示出中文。 金蝶笔试题 在线等Runtime.getRuntime().exec()问题 关于抽象类不能创建实例的一个疑惑? $$$$$$请问JAVA中怎么才能把图标拖入界面,自动读取文件的路径 exe4j是否支持jdk1.5的打包? 简单的输出问题,请教各位大虾!!!! java的中文显示问题。 谁做过把JDialog窗体最大化的程序?谢谢!!! request.getParameterName().hasMoreElement()是什么意思? 一个小问题,有结果立刻60分送上。。。。。。。。。。。。 关于eclipse2.1环境下的OutOfMemoryError问题 6 ^ 3 是什么意思?
如果是C和Java通信的话,JNI也可以考虑
java中的数据类型和C里的数据类型也有很大的区别。
因为 在java中对象的reference可以理解为我们所说的地址指针,
那么byte[]这个连续的内存空间正好符合了我们所要的存储格式,
在上层的java平台下定义好对象属性的读取顺序,然后再接受底层
传上来的内存地址,就好像得到了一个对象的引用,那么java就会
按照他的方法去读你所写的byte[]吧
对于outputstream等方法生成的字节留我没有具体看过所以还不清楚,
请高手多多指教。