最近在做一个小项目,需要在 python 和 Java 之间进行数据传输,用 socket 通信。 python 代码是这样的:
Head_Info = json.dumps(File_Dire)
Head_Info_Len = struct.pack('i', len(Head_Info))
#send file
Target_Sever.send(Head_Info_Len)
Target_Sever.send(Head_Info.encode('utf-8'))
with open(File, 'rb') as F:
data = F.read()
Target_Sever.sendall(data)
print ("done")
大概就是把数据的长度(4 字节)+数据的一些信息(json)+数据打成一个包。 差不多是这样的:
B {"Type": "File", "File_Name": "tempfile.fasttext", "File_Size": 6}hello!
在 python 里面是这样接收数据的:
Head_Struct = client.recv(1024)
Head_Len = struct.unpack('i',Head_Struct)[0]
File_Data_Raw = client.recv(Head_Len)# receve info
但到了 Java,输入变成了 IO 流,我并不能像 python 里面一样分批次拿信息了,只能一下拿完,但是对于文件传输,这相当于破坏了文件的结构,求一个解决思路(尽量在不改动 python 结构的前提下)。
indexOf
函数的一个问题我想把上述的数据包中的数据信息提取出来,代码如下
String ending = "}";
int info = Fileline.indexOf(ending) - 4;//减去 4 字节的报头
System.out.println(Fileline.substring(4, info));
输出的结果却是这样的
{"Type": "File", "File_Name": "tempfile.fasttext", "File_Size
请问是我在哪里出错了吗?
由于我只是对 coding 感兴趣,并没有进行系统学习,若出错,烦请指正 :)
Thanks again
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.