Мне нужно получить большие логические массивы или BitSets из Java в Python через текстовый файл.В идеале я хочу пройти через представление Base64, чтобы оставаться компактным, но все же иметь возможность встроить значение в файл CSV.(Таким образом, логический массив будет одним столбцом в файле CSV.)
Однако у меня возникают проблемы с правильным выравниванием байтов.Где / как я должен указать правильный порядок байтов?
Это один пример, работающий в том смысле, что он выполняется, но не работающий, потому что мои биты находятся не там, где я их хочу.
Java:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Base64;
import java.util.Base64.Encoder;
import java.util.BitSet;
public class basictest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Encoder b64 = Base64.getEncoder();
String name = "name";
BitSet b = new BitSet();
b.set(444);
b.set(777);
b.set(555);
byte[] bBytes = b.toByteArray();
String fp_str = b64.encodeToString(bBytes);
BufferedWriter w = new BufferedWriter(new FileWriter("out.tsv"));
w.write(name + "\t" + fp_str + "\n");
w.close();
}
}
Python:
import numpy as np
import base64
from bitstring import BitArray, BitStream ,ConstBitStream
filename = "out.tsv"
with open(filename) as file:
data = file.readline().split('\t')
b_b64 = data[1]
b_bytes = base64.b64decode(b_b64)
b_bits = BitArray(bytes=b_bytes)
b_bits[444] # False
b_bits[555] # False
b_bits[777] # False
# but
b_bits[556] # True
# it's not shifted:
b_bits[445] # False