本人做的程序要接收一系列的数据(从计算机串口),数据格式为十六进制,并以包来存取。一个包以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);怎么样区分包,并写入到文件中呢?请指教!多谢!!!
现在我要把收到的数据读取并存放到一个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);怎么样区分包,并写入到文件中呢?请指教!多谢!!!
问题3:既然你每次read可以读出一个字节,直接判断是否读取到0x7F字节好了。
byte abyte;
while((abyte=read())!=(byte)0x7F){
data.add(read()); //对不?
}
问题1:前面问题解决后,p序号生成就是在上述while循环外面再套层循环,每次对序号增1,仅此而已。
首先谢谢你的回答。
我并不是要去掉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
......
写完后,我还要对数据做进一步的过滤处理等等。
//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自己考虑吧。