本人做的程序要接收一系列的数据(从计算机串口),数据格式为十六进制,并以包来存取。一个包以0x7F开始,也以0x7F结束。
现在我要把收到的数据读取并存放到一个txt文本文件里,一行一个包。且要标识包名。
如data.txt内容如下:
p1:0x7F 0x11 0x7F
p2:0x7F 0x11 0x34 0x7F
p3:0x7F 0x11 0x34 0x34 0x7F
......
具体步骤:首先读取一个byte数据(函数已完成);读取众多byte数据存入一个容器中,再根据包头包尾区分以包名(p1,p2。。pn)包,再存入txt文本文件中。
问题1:怎样区分包名   int[] p = new int[1024];//?
问题2:一个包放在什么容器里?
变长数组?ArrayList?
问题3:包怎么识别?
public byte read(){//读取一个byte数据。
//略
}
ArrayList<Integer> data = new ArrayList<Integer>();
for(int i=0;i<p.length;i++){
   data.add(read()); //对不?
}
byte[] buffer = new byte[1024];
FileOutputStream fos = new FileOutputStream(new File("d://data.txt"),true);怎么样区分包,并写入到文件中呢?请指教!多谢!!!

解决方案 »

  1.   

    问题2: 如果长度肯定不超过1024,则用byte[1024]是可以的。如果没把握包尺寸有固定的上限,则用ArrayList可以的。
    问题3:既然你每次read可以读出一个字节,直接判断是否读取到0x7F字节好了。
    byte abyte;
    while((abyte=read())!=(byte)0x7F){
      data.add(read()); //对不?
    }
    问题1:前面问题解决后,p序号生成就是在上述while循环外面再套层循环,每次对序号增1,仅此而已。
      

  2.   


    首先谢谢你的回答。
    我并不是要去掉0x7f的数据,而是要在txt中显示出来。
    //数据读取到byte数组中
    byte[] readBytes(){
      byte[] buffer = new byte[4096];
      outputStream.read(buffer);
      return buffer;
    }
    //然后根据头尾将包写入txt中(此步骤该如何进行?)
    如data.txt内容如下:
    p1:0x7F 0x11 0x7F
    p2:0x7F 0x11 0x34 0x7F
    p3:0x7F 0x11 0x34 0x34 0x7F
    ......
    写完后,我还要对数据做进一步的过滤处理等等。
      

  3.   

    假设你拿到了字节数组,那么以下代码可以完成逐行打印
    //byte[] content = ...
    int lineNum = 1;
    boolean line_begin = true;
    for (byte b : content){
    if (b!=0x7f) System.out.printf(" 0x%02X" , b );
    else {
    if (line_begin) System.out.printf("p%d: 0x7F", lineNum++);
    else System.out.println(" 0x7F");
    line_begin = !line_begin;
    }
    }开文件IO什么的,LZ自己考虑吧。