用Java解析网络数据包的文本文件

时间:2013-02-14 04:01:28

标签: java arrays parsing network-programming packet

我很难用Java解析这个.dat文件。我试图解析的.dat文件的格式如下所示。这些实际上是我正在处理的数据包生成器程序的数据包。每个数据包都在每个块之间用新行描绘。我希望数据包中的每个字节都存储在一个字节[]中。我一直在使用BufferedReader readline()方法逐行,但仍然没有成功存储整个数据包。提前感谢您提供的任何帮助。

00 04 75 8d 49 c7 00 01 03 cd 50 3c 08 00 45 00 
00 30 08 0d 40 00 80 06 00 00 c0 a8 ec 20 c0 a8 
ec 1e 04 16 00 50 b8 63 45 fd 00 00 00 00 70 02 
fa f0 2b d7 00 00 02 04 05 b4 01 01 04 02 

00 01 03 cd 50 3c 00 01 03 dd 4c 2d 08 00 45 00 
00 30 00 00 40 00 40 06 e1 37 c0 a8 ec 1e c0 a8 
ec 20 00 50 04 16 e9 bb 68 bf b8 63 45 fe 70 12 
16 d0 bd 6b 00 00 02 04 05 b4 01 01 04 02 

00 04 75 8d 49 c7 00 01 03 cd 50 3c 08 00 45 00 
00 28 08 0f 40 00 80 06 00 00 c0 a8 ec 20 c0 a8 
ec 1e 04 16 00 50 b8 63 45 fe e9 bb 68 c0 50 10 
fa f0 59 ab 00 00 

00 04 75 8d 49 c7 00 01 03 cd 50 3c 08 00 45 00 
00 ed 08 10 40 00 80 06 00 00 c0 a8 ec 20 c0 a8 
ec 1e 04 16 00 50 b8 63 45 fe e9 bb 68 c0 50 18 
fa f0 5a 70 00 00 47 45 54 20 2f 20 48 54 54 50 
2f 31 2e 31 0d 0a 41 63 63 65 70 74 3a 20 2a 2f 
2a 0d 0a 41 63 63 65 70 74 2d 4c 61 6e 67 75 61 
67 65 3a 20 65 6e 2d 75 73 0d 0a 41 63 63 65 70 
74 2d 45 6e 63 6f 64 69 6e 67 3a 20 67 7a 69 70 
2c 20 64 65 66 6c 61 74 65 0d 0a 55 73 65 72 2d 
41 67 65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 2f 34 
2e 30 20 28 63 6f 6d 70 61 74 69 62 6c 65 3b 20 
4d 53 49 45 20 36 2e 30 3b 20 57 69 6e 64 6f 77 
73 20 4e 54 20 35 2e 30 29 0d 0a 48 6f 73 74 3a 
20 31 39 32 2e 31 36 38 2e 32 33 36 2e 33 30 0d 
0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 4b 65 65 
70 2d 41 6c 69 76 65 0d 0a 0d 0a 

1 个答案:

答案 0 :(得分:0)

一个数组是固定长度的,看起来你不知道在你打一个空白行之前你将拥有多少字节而你不知道你将拥有多少总数据包。

我建议使用ArrayList<ArrayList<Byte>>来保存所有数据包 - 这将根据需要增长。

创建一个初始ArrayList<Byte>然后它是一个简单的循环:

  • 虽然readline()不为空
  • 检查空行
  • 如果不是空白
    • 使用String
    • String[]解析为String.split()
    • 遍历String[]并将每个十六进制对转换为byte并添加到ArrayList<Btye>
  • 如果空白
    • ArrayList<Byte>添加到ArrayList<ArrayList<Byte>>
    • 制作新ArrayList<Byte>

readline()返回null时,循环退出,而ArrayList<ArrayList<Byte>>包含所有数据包。