7月1号到公司报到了~直接给我一个发射器(tag)和接收器(USB口),让我从COM端口读取数据。
没弄过,一头雾水。但是吧,网友的力量是强大的,我要做的功能很简单,所以网上的一些介绍完全够了。
要求:
用JAVA 从COM口读取数据,并保存在本地,保证收包率。(COM端口的数据读取,网上用的源码,稍微改写一些就ok了)
问题:首先是javax的Comm包配置的问题,包里的文件不知道放哪里。会出现好像叫nosuchportException的错误,找了好多配置方案,暂时都没有实现(应用要求也没
那么多,实现就可以,所以没细细的搞)
在网上搜到一个好方法,直接把类导入工程里,代码如下:
String driverName = "com.sun.comm.Win32Driver";
CommDriver driver = null;
try {
System.loadLibrary("win32com");
driver = (CommDriver) Class.forName(driverName).newInstance();
driver.initialize();
} catch (InstantiationException e1) {
System.out.println(e1);
} catch (IllegalAccessException e1) {
System.out.println(e1);
} catch (ClassNotFoundException e1) {
System.out.println(e1);
}
ok了,问题没有了。然后正常读取数据。
一开始以为while循环一直读,总不会丢包吧,但是天不遂人愿啊!T_T
然后以为是读入的数据保存的缓存(接受数组)不够,然后用了缓存池(二位数组、循环队列之类的),还是不行啊!
然后网上看到,用多线程什么的,一个线程读,一个线程写。对于菜鸟,线程哪里学过啊(虽然用过一点源码,也不是很难上手)!但是哪里高兴去搞,好在,那个网友指
出,用线程实现会有延迟的问题。所以果断放弃!
然后那个网友又提到,直接去掉线程之类的东西,我大概知道他是什么意思,就是不要多余的缓存,线程之类的,我直接全部保存起来,不用中介。大概是这么个印象。我
想想,和直接while(true)读取,然后保存有神马区别呢?
于是我考虑,我不写,然后全部保存在内存怎么样呢?结果不错,内存里的数据没有丢失的现象。然后,我就每隔一段时间把内存写入磁盘,然后在保存。差多都就解决了。
细节,接下来再弄弄,应该ok~