Java的:收到包含从Python脚本元组在TCP列表的列表

成本Papageorge:

我有一个Python脚本,我想送一个包含整数的元组通过TCP连接的Android应用程序列表的列表。为了实现这一目标,我酸洗列表,然后我送它。问题是在Android应用程序方面,我收到的数据,我用取储存它Unpicklernet.razorvine.pickle.Unpickler,但我不知道如何恢复初始结构。
这种方法工作时,我试图发送一个字符串列表,它工作得很好用下面的代码,因为我印在logcat中列表的元素。
Java的:

Unpickler unpickler = new Unpickler();
in.read(buffer);
Object t= (Object) unpickler.loads(buffer);
List<String> strs = (Arraylist<String>) t;

我尝试同样用含有整数的元组,如下列表的列表(I用于Pairandroid.util):

Unpickler unpickler = new Unpickler();
in.read(buffer);
Object t= (Object) unpickler.loads(buffer);
List<ArrayList<Pair<Integer,Integer>>> coords = (ArrayList<ArrayList<Pair<Integer,Integer>>>) t;

我试图打印列表元组的第一个数字:

for (ArrayList<Pair<Integer,Integer>> coordsPair: finalCoords){
    for(Pair<Integer,Integer> coord: coordsPair) {
        Log.d("coordinates: ",""+coord.first);
    }
}

但我并没有在logcat中得到任何的结果的类型转换unpickler.loads(buffer)没有工作。这是错误的方式重新获得列表的初始结构?

成本Papageorge:

最后,我设法找到一个解决方案:首先,我首先改变了我通过更换接收腌制数据in.read(buffer);具有以下块:

ByteArrayOutputStream bff = new ByteArrayOutputStream();

int nRead;
byte[] data = new byte[16384];
byte[] pickledStream;
while ((nRead = in.read(data, 0, data.length)) != -1) {
    bff.write(data, 0, nRead);
}
pickledStream = bff.toByteArray();

然后,我保存了拆封数据到Object t,然后我通过tList<ArrayList<Object[]>>,而不是List<ArrayList<Pair<Integer,Integer>>>作为蟒蛇元组可以被视为一个对象。

Object t = unpickler.loads(pickledStream);
List<List<Object[]>> finalCoords= (List<List<Object[]>>) t;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章