从Python到VB.NET的代码转换:使用字节

时间:2018-10-03 15:31:16

标签: python vb.net

我正在研究二进制文件切片:已经以python编写的代码用于测试。现在,我将代码从python转换为vb.net。

python:

img = np.fromfile(f, dtype='int16')
img1 = img[0:1024*1024]
img1 = img1.reshape([1024,1024])

img2 = img[1024*1024:2*1024*1024]
img2 = img2.reshape([1024,1024])
#similarly for next 6 slices

vb.net:

Dim buffc_1024_1() As Byte = New Byte((1024*1024*2)-1){}
Dim buffc_1024_2() As Byte = New Byte((1024*1024*2)-1){}

Buffer.BlockCopy(_DATA,0,buffc_1024_1,0,1024*1024)
Buffer.BlockCopy(_DATA,1024*1024,buffc_1024_2,0,1024*1024)
'similarly for next 6 slices

_DATA是读取的输入文件,用于创建这8个数据切片。第一个副本已正确完成,但第二个数据副本不正确,不确定是否是由于Buffer.BlockCopy引起的。不幸的是,我无法上传二进制文件作为其专有文件。

1 个答案:

答案 0 :(得分:0)

如果我没记错的话,您想分块读取数据,每个块的大小为1024 * 1024 * 2字节。

Dim bufferSize = 1024 * 1024 * 2

Dim buffc_1024_1() As Byte = New Byte(bufferSize) {}
Dim buffc_1024_2() As Byte = New Byte(bufferSize) {}
Dim buffc_1024_3() As Byte = New Byte(bufferSize) {}
Dim buffc_1024_4() As Byte = New Byte(bufferSize) {}
Dim buffc_1024_5() As Byte = New Byte(bufferSize) {}
Dim buffc_1024_6() As Byte = New Byte(bufferSize) {}

Using _DATA As Stream = File.OpenRead("C:\input-text.txt")
    Console.WriteLine(_DATA.Read(buffc_1024_1, 0, bufferSize))
    Console.WriteLine(_DATA.Read(buffc_1024_2, 0, bufferSize))
    Console.WriteLine(_DATA.Read(buffc_1024_3, 0, bufferSize))
    Console.WriteLine(_DATA.Read(buffc_1024_4, 0, bufferSize))
    Console.WriteLine(_DATA.Read(buffc_1024_5, 0, bufferSize))
    Console.WriteLine(_DATA.Read(buffc_1024_6, 0, bufferSize))
End Using

我使用了一个大小为6,839,410字节的文本文件。前3次读取操作,缓冲区已满。但是第4个操作仅读取547954字节,因为没有剩余的字节可读取。最后2个操作不会读取任何字节。因此,这段代码的结果是:

2097152
2097152
2097152
547954
0
0

尝试将您的python代码和该代码的结果与相同的输入文件(我没有您的文件,因此我使用随机文件)进行比较。

注意。 您可以删除Console.WriteLine(_DATA.Read(...))部分。只需调用_DATA.Read(...)。