存档在 2016年6月

项目总结:一种Java串口自定义协议解析方法

2016年6月28日
	class ReceiveThread extends Thread {
		private InputStream mInputStream;
		@Override  
		public void run() {  
			super.run();  
			mInputStream = serialPort.getInputStream();
			int maxLength = 2048;  //2016-06-26
			byte[] buffer = new byte[maxLength];  
			int available = 0;  
			int currentLength = 0;   
			int factPackLen = 6;  

			while (!serialPort.isOpen) {
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			//while (!isInterrupted()) {  
			while (true) {  
				try {  
					available = mInputStream.available();  
					if (available > 0) {  
						// 防止超出数组最大长度导致溢出  
						//System.out.println("available+++++++++++++++++++++++++:"+available);  
						if (available > maxLength - currentLength) {  
							available = maxLength - currentLength;  
						}  
						mInputStream.read(buffer, currentLength, available);  
						currentLength += available;  
					}else{
						Thread.sleep(10);
					}
				}  
				catch (Exception e) {  
					e.printStackTrace();  
				}  
				int cursor = 0;  
				while (currentLength >= factPackLen) {  
					if (buffer[cursor] != (byte)0xFB) {  
						//System.out.println("未发现头部");
						--currentLength;  
						++cursor;  
						continue;  
					}  
					if (currentLength < factPackLen) {  
						break;  
					} 
					if(buffer[cursor + factPackLen - 1] != (byte)0xFE){

						--currentLength;  
						++cursor; 
						continue;
					}
					// System.out.println("发现完整帧");
					onDataReceived(buffer, cursor, factPackLen);  
					currentLength -= factPackLen;  
					cursor += factPackLen;   
				}  
				if (currentLength > 0 && cursor > 0) {  
					System.arraycopy(buffer, cursor, buffer, 0, currentLength);  
				}  
			}  
		}  
	}  
	protected void onDataReceived(final byte[] buffer, final int index, final int packlen) {  
		byte[] buf = new byte[packlen];  
		System.arraycopy(buffer, index, buf, 0, packlen);  
		getUploadData(buf);
	} 

项目总结:一种Java线程暂停、运行方法

2016年6月28日
private abstract class SendThread extends Thread {  

		private boolean suspend = false;  

		private String control = ""; // 只是需要一个对象而已,这个对象没有实际意义  

		public void setSuspend(boolean suspend) {  
			if (!suspend) {  
				synchronized (control) {  
					control.notifyAll();  
				}  
			}  
			this.suspend = suspend;  
		}  

		public boolean isSuspend() {  
			return this.suspend;  
		}  

		public void run() {  
			while (true) {  
				synchronized (control) {  
					if (suspend) {  
						try {  
							control.wait();  
						} catch (InterruptedException e) {  
							e.printStackTrace();  
						}  
					}  
				}  
				this.runPersonelLogic();  
			}  
		}  
		protected abstract void runPersonelLogic(); 
	}

SendThread sendThread = new SendThread() {
protected void runPersonelLogic() {
}
};

项目总结:一种Java线程暂停、运行、停止方法

2016年6月28日
	private abstract class WorkThread extends Thread {  
		private boolean suspend = false;  
		private String control = ""; // 只是需要一个对象而已,这个对象没有实际意义  
		private volatile  boolean exit = false;
		public void setSuspend(boolean suspend) {  
			if (!suspend) {  
				synchronized (control) {  
					control.notifyAll();  
				}  
			}  
			this.suspend = suspend;  
		}  
		
		public boolean isSuspend() {  
			return this.suspend;  
		}  
		public void setExit(boolean f){
			exit = f;
		}
		public void run() {  
			while (!exit) {  
				synchronized (control) {  
					if (suspend) {  
						try {  
							control.wait();  
						} catch (InterruptedException e) {  
							e.printStackTrace();  
						}  
					}  
				}  
				this.runPersonelLogic();  
			}  
		}  
		protected abstract void runPersonelLogic(); 
	}
			workThread = new WorkThread() {  
					protected void runPersonelLogic() {  
						
						}

				};  
				workThread.start();

自动备份定时备份

2016年6月22日

http://blog.csdn.net/testcs_dn/article/details/48829785

http://www.2cto.com/database/201312/262789.html

EZHTTP Web环境安装

2016年6月21日

一、EZHTTP简介
github项目地址:https://github.com/centos-bz/EZHTTP

1、EZHTTP目前可安装的软件有:
LAMP,LNMP,LNAMP,具体是:

nginx、openresty、tegnine
httpd-2.2.x 、httpd-2.4.x
php-5.2.17、php-5.3.x、php-5.4.x
ZendOptimizer ZendGuardLoader xcache eaccelerator php_imagemagick ionCube memcache php_redis php_mongo apc
mysql-5.1.x、mysql-5.5.x、mysql-5.6.x
memcached,pureftpd,phpmyadmin,redis server,mongodb,phpRedisAdmin,memadmin

2、支持的系统
理论上支持所有Linux系统,但推荐的系统有centos、ubuntu、debian

3、一些特性
国内国外节点,自动测速选择最优节点下载
自定义版本安装,只需要软件版本号和下载地址
可以制作成rpm包,方便下次或者批量部署到服务器
一切可单独安装,自由选择
提供丰富的小工具,让配置linux更简单

4、安装出错怎么办
安装出错时,请在此专区压缩上传/root/ezhttp.log,我会第一时间为你提供解决方法。

5、如何赞助EZHTTP
https://www.centos.bz/forum/thread-69-1-1.html
https://github.com/centos-bz/EZHTTP

linux下删除空行的几种方法

2016年6月20日

在查看linux下的配置文件时,为了便于一目了然的查看,经常会删除空行和#头的行。而linux在删除空行的方法很多,grep、sed、awk、tr等工具都能实现。现总结如下:

1、grep

grep -v '^$' file

2、sed

sed '/^$/d'  file 或 sed -n '/./p' file

3、awk

awk '/./ {print}' file 或 awk '{if($0!=" ") print}'

4、tr

tr -s "n"

除此之外,vim也可以在查看时。通过命令模式删除空行。vim在命令模式下输入:

%s/^n//g

意思是全局替换所有以回车开头的字符,替换为空。如果有多个连续的空行,想保留一行。则只需在命令行模式输入下行即可:

%s/^n$//g

mysql 远程数据库问题

2016年6月18日

修改绑定地址为192.168.0.100

Netty几个重要资源

2016年6月7日

最近项目需要需要开发一后台服务器,语言我选择了java,网络通信框架最开始使用了mina,后面转到Netty,因此需要重新拾起。

资源:

  • 1.github资源,可以读读example
  • https://github.com/unix8net/netty

  • 2.Netty官网
  • http://netty.io/downloads.html

  • 3.maven repository
  • http://mvnrepository.com/artifact/io.netty/netty-all