读blob格式

时间:2015-05-06 21:10:59

标签: java blob

我有一个二进制数据blob作为字符串(十六进制),它不是来自数据库,我想得到它的文本表示。

String b = "00000000000000000000000008004500003c65c34000400651acc0a800fec0a800fedb620ceaccd8bb4d00000000a0028018ba5100000204400c0402080a00f0de8e0000000001030306";

ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int i = 0; i < b.length(); i+=2) {
    baos.write(Integer.parseInt(b.substring(i, i + 2), 16));
}

byte[] bytes = baos.toByteArray();
String blobString = new String(bytes);
System.out.println(blobString);

但在运行时,我得到:

�������������ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����ގ����E��ގ����ގ����<e�@�@Q����������b��ػM�������Q��@
��ގގ����ގ����ގ����ގ����ގ����ގ��������

我知道它应该输出一些可读的东西,所以我可能会做错事。 如何将二进制数据转换为可读字符串?

<小时/> 我试着读这个(我将这些部分分开来说清楚):

/* Header */

d4c3 b2a1 0200 0400 0000 0000 0000 0000
ffff 0000 0100 0000

=======================================
/*First packet*/
/*Header*/
c1f9 7e48 //timestamp seconds
e913 0200 //timestamp offset microseconds
4a00 0000 //number of octet saved in file
4a00 0000 //actual length of packet = 74 bytes
/*Packet data*/
0000 0000 0000 0000
0000 0000 0800 4500 003c 65c3 4000 4006
51ac c0a8 00fe c0a8 00fe db62 0cea ccd8
bb4d 0000 0000 a002 8018 ba51 0000 0204
400c 0402 080a 00f0 de8e 0000 0000 0103
0306

当遇到tcpdump时,我得到了这个输出:

2008-07-17 09:50:25.136169 IP 192.168.0.254.56162 > 192.168.0.254.mysql: Flags [S], seq 3436755789, win 32792, options [mss 16396,sackOK,TS val 15785614 ecr 0,nop,wscale 6], length 0

2 个答案:

答案 0 :(得分:1)

如果这是PCAP转储的一部分,则需要将其解析为网络数据包。或者您将其写为原始字节并使用其中一个可用的网络分析器。查看字符串我希望45IPv4 header的开头,那么06将是协议字段(在本例中为TCP)。 c0a800fe(192.168.0.254)是源IP和目标IP。等等,你明白了。

它似乎是一个TCP SYN数据包(第一个新连接),因此它不包含任何有效负载。

--link--
000000000000 // src mac
000000000000 // dst mac
    0800 // ether type: IP
--ipv4--
4500003c // v4 5*32bit length
65c34000 // ID FLG OFF
400651ac // TTL PROT(6=tcp) CHECK
c0a800fe // ip.src
c0a800fe // ip.dst
---tcp---
db620cea // src.port 56162 -> dst.port 3306
ccd8bb4d // tcp.seq (=3436755789)
00000000 // tcp.ack
a0028018 // off  0x02=URG/ACK/PSH/RST/SYN(1)/FIN(0)
...

答案 1 :(得分:0)

试试这个:

String blobString = new String(bytes, "UTF-8");