首先抱歉英语不好。
好吧,我想从torrent文件中读取片段哈希信息。目前,我正在使用https://github.com/hyPiRion/java-bencode这个bencode库来解码信息,但我的问题是当我想将字符串转换为字节数组时。 torrent文件以UTF-8编码。但如果我这样做
Byte[] bytepieces = piecestring.getBytes("UTF-8");
它很好。任何真正有用的东西。
对于另一方,为了比较或尝试获取字符串,而不是获取字节,我已经读取了我的文件的第一部分,并计算了sha1。获得sha1的20个大小的字节数组后,如果我将它转换为字符串,实际上,字符串匹配大字符串的第一部分...但是,如果我尝试返回生成的字符串,则为20个原始字节创造了它...我不能......怎么做?
小例子:
FileInputStream fin = new FileInputStream("miFile");
byte[] array = new Byte[512*1024]; //a piece of 512 kb
fin.read(array,0,512*1024);
MessageDigest md = MessageDigest.getInstanse ("SHA);
Byte [ sha1byte = md.digest(array);
String s = new String(sha1byte,"UTF-8");
执行此操作后,sha1byte.length为20,并且正常,是sha1哈希的正确大小。但如果我这样做
s.getBytes("UTF-8").length, in the case of my example i got... ¡33! ¡wuuut!
我想再次从生成的字符串中获取20个数组。我怎么能得到这个?
非常感谢:P
答案 0 :(得分:0)
我将二进制数据存储为字符串,因为.torrent文件中的BEncode格式,将该二进制数据存储为字符串
Bencode“字符串”是字节序列,而不是unicode代码点的序列。因此,语言在java中的字节表示 - byte[]
或ByteBuffer
是合适的,并且在某些情况下只应被解释为utf8字符串,当它们实际包含应该是人类可读的内容时。
因此,您应该使用支持提取原始字节的bencoding库。
答案 1 :(得分:0)
感谢大家的回答,但我可以使用此https://github.com/bedeho/bencodej
找到解决方案lib将Bencode数据加载为带有自定义类的bytearray,并且能够与bytestrings一起使用1:1:p 谢谢大家。