模块需求分析

负责采集指定文件中的数据(智能家居环境监测系统产生的数据)

流程

  1. 从本地文件按行读取数据
  2. 解析数据
  3. 构造Environment对象集合并返回

每行数据9个部分的意义

  1. 发送端id
  2. 树莓派系统id
  3. 实验箱区域模块id(1-8)
  4. 模块上传感器地址
  5. 传感器个数
  6. 指令标号(3表示需要接受数据16表示需要发送数据)
  7. 数据16进制,需要转换成10进制(如果是16前两个字节是 温度数据,中间两个字节是湿度数据。如果不是16前两个字 节就是对应的数据)
  8. 状态标示(默认为1表示成功)
  9. 采集时间(单位时秒)

核心功能实现

假设读取到的一行数据为

100|101|2|16|1|3|5d606f7802|1|1516323596029

使用split函数将字符串分割为9个部分,然后按照对应的意义取出相关数据,调用Environment的构造函数创建Environment对象,并加到集合中。

特殊知识点复习

通过|分割字符串

由于split函数的参数是一个正则表达式,而|在正则表达式是关键字,所以想要实现按|分割字符串,就必须使用转义字符或使用[]

//1
String[] arr = line.split("\\|");
//2
String[] arr = line.split("[|]");

字符串截取

5d606f7802的前四个字符为温度数据,第58个字符是湿度数据,需要使用substring函数实现字符串截取 。

//温度
String str1 = data.substring(0, 4);
String str2 = data.substring(4, 8);

注意:substring(int startIndex, int endIndex) 中是左闭右开

16进制转换为10进制

5d6016进制数据,在本项目中需要将其转换为10进制,需要用到基本数据包装类的parse**函数,下面是几个例子

int _10_int = Integer.parseInt("5d60", 16);
long _10_long = Long.parseLong("5d60", 16);
...

13位时间戳字符串转换为Timestamp对象

使用Long将字符串解析为long类型数据,然后使用Timestamp类的构造函数

Timestamp t = new Timestamp(Long.parseLong("1516323596029"));

相关知识点复习

Timestamp、Date、String之间的转换

StringDate

String dateStr = "2019-10-29 20:00:00";
DateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"); //需要与字符串格式对应
try{
    Date date = sdf.parse(dateStr);
    System.out.println(date);
}catch(Exception e){
    e.printStackTrace();
}

DateString

Date date = new Date();
DateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
String dateStr = sdf.format(date);
System.out.println(dateStr);

StringTimestamp

//13位时间戳
Timestamp t1 = new Timestamp(Long.parseLong("1516323596029"));
//标准日期格式 yyyy-mm-dd hh:mm:ss[.f...]
Timestamp t2 = Timestamp.valueOf("2019-10-29 20:00:00");

TimestampString

Timestamp ts = new Timestamp(System.currentTimeMillis());
String str1 = ts.toSring();
String str2 = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(ts);
System.out.println(str1);
System.out.println(str2);

DateTimestamp

Date date = new Date();
Timestamp ts = new Timestamp(date.getTime());

TimestampDate

Timestamp ts = new Timestamp(System.currentTimeMillis());
Date date = new Date(ts.getTime());

IO流

BufferedReader、BufferedWriter

FileInputStream、FileoutputStream

ByteArrayInputStream、ByteArrayOutputStream

FilterInputStream、FilterOutputStream

ObjectInputStream、ObjectOutputStream

results matching ""

    No results matching ""