Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python读取用Java编写的字节文件_Java_Arrays_File_Byte - Fatal编程技术网

如何使用Python读取用Java编写的字节文件

如何使用Python读取用Java编写的字节文件,java,arrays,file,byte,Java,Arrays,File,Byte,在JavaAndroid中,我有两个独立的大型数组,分别是short和int类型。我想把它们写在一个文件中,然后用Python读取它们来重新创建数组。问题是,我认为该文件是用Java正确创建和编写的,但我无法用Python正确读取该文件。 我使用Java中的以下代码位来编写数组 File mFile = new File( this.getExternalFilesDir(null),"testFile.txt"); ObjectOutputStream objectOutp

在JavaAndroid中,我有两个独立的大型数组,分别是short和int类型。我想把它们写在一个文件中,然后用Python读取它们来重新创建数组。问题是,我认为该文件是用Java正确创建和编写的,但我无法用Python正确读取该文件。 我使用Java中的以下代码位来编写数组

File mFile = new File( this.getExternalFilesDir(null),"testFile.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(mFile));
objectOutputStream.writeObject(intArray);
objectOutputStream.close();
with open('\..\testFile.txt', 'rb') as mFile:
    for ln in mFile:
        # To Read Short Array 
        print( list( struct.unpack('>' + 'h'*(len(ln)//2), ln) ) )
        # To Read Int Array
        print( list( struct.unpack('>' + 'i'*(len(ln)//4), ln) ) )

Output : [1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024]
我还使用下面的方法在数组上循环编写了该文件,我认为它也可以正常工作

File mFile = new File( this.getExternalFilesDir(null),"testFile.txt");
OutputStream outputStream = new FileOutputStream(mFile);
for (int x: intArray) {
    outputStream.write(x);
}
objectOutputStream.close();
如何读取此文件并在python中创建数组。我尝试引用Python结构库,但无法使用它。 我尝试用Python阅读以下代码。 我试过一个演示阵列 [1000100110003,…,1025]

with open('/../testFile.txt') as mFile:
    for ln in mFile:
        print( list( struct.unpack('I*'(len(ln)//4), ln) ) )

这个raise错误:解包需要在print语句处有104字节的缓冲区。

多亏了Joop Eggen的评论,我修改了Java代码,使用DataOutputStream写入数据,并使用Big-Endian格式读取文件,这是我没有做的,Joop Eggen指出的。下面是Java代码

short[] mBuffer = {1000, 1001,....,1025};
ByteBuffer byteBuffer = ByteBuffer.allocate(mBuffer.length*2);
ShortBuffer sBuffer = byteBuffer.asShortBuffer();
sBuffer.put(mBuffer);

File mFile = new File( this.getExternalFilesDir(null),"testFile.txt");
OutputStream outputStream = new FileOutputStream(mFile);
outputStream.write(byteBuffer.array());
用于读取和创建数组的Python代码

File mFile = new File( this.getExternalFilesDir(null),"testFile.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(mFile));
objectOutputStream.writeObject(intArray);
objectOutputStream.close();
with open('\..\testFile.txt', 'rb') as mFile:
    for ln in mFile:
        # To Read Short Array 
        print( list( struct.unpack('>' + 'h'*(len(ln)//2), ln) ) )
        # To Read Int Array
        print( list( struct.unpack('>' + 'i'*(len(ln)//4), ln) ) )

Output : [1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024]

我无法在Python中正确读取文件,您编写的Python代码在哪里?运行时会发生什么?AnObjectOutputStream是特定于java的存储类和对象及其属性等。使用DataOutputStream,并将int作为big-endian读取,或者使用ByteBuffer读取。在Python中,您根本无法读取这些数据。只在Java中,最大的问题是你问一个字节文件,但你甚至没有做一个int文件。我能想到的最好的方法是以字节为单位编写文件,并使用网络字节顺序。