随笔分类 -  JAVA

Base64 加密之中文乱码
摘要:Base64编码将二进制数据按照每三个字节转换成四个字节可读字符,编码后的字符长度大约为136.1%。字符范围为 A-Z a-z 0-9 \ +。但编码后的字符串不太适合使用URL传输,中文加密后的乱码也多是因为这个原因引起:放在url中传输时+号会被替换成空格;并且每76个字符都会添加一个换行"\n",这个换行符合会丢失。例如:哈哈哈哈哈哈。。。。哈哈哈哈哈哈。。。。哈哈哈哈哈哈。。。。会被编码为:uf65/rn+uf65/rn+oaOho6GjDQoNCrn+uf65/rn+uf65/qGjoaOhow0KDQq5/rn+uf65/rn+uf6h\no6GjoaM=放在 阅读全文

posted @ 2012-09-29 12:16 心笑峰 阅读(16539) 评论(0) 推荐(0) 编辑

JAVA 笔记 Callable 与 FutureTask:有返回值的多线程
摘要:常用的Thread类在run方法执行完之后是没有返回值的,要实现子线程完成任务后返回值给主线程需要借助第三方转存。Callable接口则提供了一种有返回值的多线程实现方法。下面以一个简单的地主、监工和长工的例子展示这种接口的用法。长工类:长工类实现了Callable接口,线程运行完成后返回一个Integer值。 importjava.util.concurrent.Callable;publicclass Changgong implementsCallable<Integer>{privateinthours=12;privateintamount;@Overridepublic 阅读全文

posted @ 2012-09-26 16:44 心笑峰 阅读(10044) 评论(0) 推荐(0) 编辑

JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
摘要:Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。 例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.class.getResourceAsStream("name") 会在com.test.mycode包下查找相应的资源。 如果这个name是以 '/' 开头的,那么就会从classpath的根路径下开始查找。 ClassLoader.getResourceAsStream() 无论要查找的资源前面是否带'/' 都会从classpath的根路径下查找。 阅读全文

posted @ 2012-08-08 16:19 心笑峰 阅读(34869) 评论(3) 推荐(5) 编辑

JAVA笔记 Form界面的log展示
摘要:importjava.awt.BorderLayout;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowEvent;importjava.awt.event.WindowListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;i. 阅读全文

posted @ 2012-08-03 15:35 心笑峰 阅读(1546) 评论(0) 推荐(0) 编辑

HTTP文件断点上传
摘要:由于业务需要,手机需要采用http方式传输文件到后台WEB服务器,1、2百K的小文件不会有太大问题,几M甚至几百M的文件就很容易传输失败。所以考虑实现HTTP文件断点续传功能,基本流程如下:1.客户端计算本地要上传的文件的hashcode2.根据指定的块大小和文件大小计算最终的块数3.发送文件信息到服务器包括要上传的文件名、大小、类型、块数、Hashcode4.服务器根据hashcode查询服务器上是否已经存在对应的文件,以及文件的上传状态(上传是否完成、是否组装完成、已经上传了哪些块)5.6.已经上传完成的读取文件URL地址返回给客户端7.8.未上传完成的返回已经上传的块编号 9.客户端根. 阅读全文

posted @ 2012-07-25 15:25 心笑峰 阅读(18794) 评论(2) 推荐(2) 编辑

JAVA笔记 文件HASH
摘要:public static void main(String args[]) { try { System.out.println(getMD5Checksum("RationalRoseEnterpriseEditionforWindows.2003.06.00.391.000.exe")); } catch (Exception e) { e.printStackTrace(); } } public static byte[] createChecksum(String filename) throws Exception { InputStream fis = .. 阅读全文

posted @ 2012-06-27 16:18 心笑峰 阅读(4240) 评论(0) 推荐(1) 编辑

JAVA 笔记 MD5加密
摘要:简单的MD5加密代码: packagecom.test.md5;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;publicclassMD5Parase {publicstaticStringautType="MD5";publicstaticStringhash(Stringdata){try{returnhash(data.getBytes("UTF-8"));}catch(Exceptionex){returnnull;}}publicst 阅读全文

posted @ 2012-04-16 12:40 心笑峰 阅读(346) 评论(0) 推荐(0) 编辑

JAVA 笔记 CopyOnWriteArrayList
摘要:在写代码时遇到了一个ConcurrentModificationException异常,百度了下发现是因为在使用Iterator遍历时原数据发生了变化导致的。业务的需求如下: 有一个数据监听器列表,当系统收到数据时遍历列表中的每一项并发送数据。当遍历的过程中有可以会新增或删除相应的监听器。 这种情况下可以使用CopyOnWriteArrayList 来实现监听器列表。 原理如下: JAVA中将引用从一个对象移到另外一个对象不需要消耗CPU时间,可以看做是一个原子操作。 JAVA中如果一个对象仍旧存在引用,则不会被CG回收。 CopyOnWriteArrayList就是根... 阅读全文

posted @ 2012-04-13 16:42 心笑峰 阅读(1713) 评论(1) 推荐(0) 编辑

JAVA 笔记 ReadWriteLock
摘要:ReadWriteLock适用于: 同一个对象,允许多个线程同时读,只允许一个线程写,且读写不能同时进行。 用法:ReadWriteLocklock=newReentrantReadWriteLock();lock.readLock().lock();try{//读取数据}finally{lock.readLock().unlock();}lock.writeLock().lock();try{//写数据}finally{lock.writeLock().unlock();} 阅读全文

posted @ 2012-04-13 12:28 心笑峰 阅读(388) 评论(0) 推荐(0) 编辑

JAVA JSON String to Object 转换中的集合
摘要:如果要转换到的Bean类中含有类似ArrayList、Map、List这样的集合时,要对集合进行处理,否则会报“net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXX”这样的异常。 处理方法如下: 1.定义一个Map Map <String,Class> mymap = new HashMap<String,Class>(); 2.向Map中put Bean中集合成员名和对应的类型 mymap.put("content",ClientInfo.class); //我这里的成员名为content 阅读全文

posted @ 2012-03-02 12:28 心笑峰 阅读(7503) 评论(0) 推荐(0) 编辑

fqueue(二)
摘要:上一篇blog分析了fqueue 的数据存储层的实现。这篇主要分析通信部分。fqueue使用jmemcached做为通信层,jmemcached与客户端的交互使用netty框架。 主要的类如下: startNewQueue:启动类,每new一个instance 都会启动一个监听了相应端口的服务。 MemCacheDaemon:负责通信的管理,包括调用netty建立监听,接受连接等,这里会根据交互数据格式的不同选择处理二进制数据或字符数据。 CacheImpl:对Cache接口的具体实现,使用FSQueue做为实际的数据存储层。 MemcachedCommandHandler:对netty收到. 阅读全文

posted @ 2012-02-09 21:02 心笑峰 阅读(1454) 评论(0) 推荐(0) 编辑

内存映射文件
摘要:使用内存映射文件可以访问和修改那些超过机器内存大小而无法完全加载到内存的文件。MappedByteBuffer 可以将文件映射到内存中(不一定是物理内存),然后像使用数组般访问。 构建方法:MappedByteBuffer buf = new RandomAccessFile("file","rwd").getChannel().map(MapMode.READ_WRITE,0,length); 从java.nio.ByteBuffer,java.lang.Object继承的方法: get,getChar,getDouble,getFloat,getIn 阅读全文

posted @ 2012-02-07 17:19 心笑峰 阅读(369) 评论(0) 推荐(1) 编辑

fqueue 消息队列(一)
摘要:fqueue 是国内开发人员用JAVA开发的一款开源消息队列系统。消息队列可用来处理高并发量的数据库读写操作,降低数据库负载。fqueue的通信层使用了netty框架,数据存储则采用文件队列的方式。 存储层主要的类有以下几个: FQueue:主要的队列实现主类,所有的消息存储与读取都通过此类进行 FSQueue:FQueue的底层实现,主要是在文件队列系统层面的读写与管理控制 LogEntity:针对单个数据存储文件的操作类 LogIndex:索引文件控制类 整个存储队列关键的代码及功能如下: 1. 有专门的读和写操作句柄负责对当前存储文件的操作。 //当前写到的位置指针 private... 阅读全文

posted @ 2012-02-07 11:38 心笑峰 阅读(4728) 评论(0) 推荐(2) 编辑

Java Cache System JCS(一) 使用方法
摘要:JCS 是JAVA 中缓存的一种实现,支持将数据缓存到内存或硬盘中,支持设置缓存对象的有效时长。使用时需要用到以下几个jar包:commons-collections-2.1.1.jarcommons-lang.2.3.jarcommons-logging-1.0.4.jarconcurrent-1.3.2.jarjcs-1.3.jarslf4j-api.jar定义实现了Serializable 接口的存储对象类:public class UserInfo implements Serializable{ private String username; private St... 阅读全文

posted @ 2012-01-05 18:09 心笑峰 阅读(4333) 评论(0) 推荐(0) 编辑

OF 同步异步问题的改进
摘要:之前的一篇文章中提到过OF中的同步异步问题,这里针对文章最后描述的两个缺点做些改进。 这里提供一个公共的专门用于处理S2S通信问题的IQ类S2SDataManager。 可以提供多种接口:1.阻塞等待固定时长;2.阻塞等待,并在接收到结果或超时后继续;3.发送后直接返回;4.发送后直接返回,提供回调接口。 public class S2SDataManager implements IQResultListener{ private XMPPServer server; private RoutingTable routing; private long timeout=... 阅读全文

posted @ 2012-01-05 17:18 心笑峰 阅读(202) 评论(0) 推荐(0) 编辑

DelayQueue 队列
摘要:DelayQueue----一种有序队列,特点就是只有在队列中的元素到期后才能取出。 1.内存中哪些对象到了超时时间,需要从内存中清除出去。 2.服务器连接中有哪些连接很长时间未操作,需要关闭这些连接 3.任务中有哪些到了执行时间,该进行调度了。简单的方法就是写一个线程不断去检查每一项是否到了时间,但这种方法在队列中的元素非常多的情况下会不准确或太耗费性能,用DelayQueue可完美地解决这个问题。 马上就要过年了,每次回老家都要悲催地去镇上人挤人的网吧上网。下面就拿这个做个例子: 假设镇上开了一家无限大的网吧,每人交一块钱可以上一分钟网(过年时的网吧坑爹程度差不多就这样); 网吧比较老式. 阅读全文

posted @ 2011-12-20 17:14 心笑峰 阅读(300) 评论(0) 推荐(0) 编辑

同步、异步、阻塞、非阻塞---我的理解
摘要:同步、异步、阻塞、非阻塞,涉及到一个问题的两个层面。一个是操作operation/Thread/process 层面,另一个是kernal层面。所有的阻塞、非阻塞都在针对同步的情况下才有效。 同步与异步最大区别在于是否需要底层的响应才能执行下去。 阻塞与非阻塞的区别在于是否能立即返回响应。 一个比较形象的例子如下: 同步-阻塞:我去钓鱼,抛线之后一直站在岸上盯着鱼竿有动静后才拉杆。 同步-非阻塞:我去捕鱼,拿一个大网捞一下,有没有鱼立马可以看出来,不用等,直接再捞。 异步-阻塞:java中的异步IO,其实取这个名字与上面的例子没多大关系,实在是因为java中使用reactor模式阻塞监听... 阅读全文

posted @ 2011-12-19 21:21 心笑峰 阅读(270) 评论(0) 推荐(0) 编辑

JAVASwing GridBagLayout 布局
摘要:用GridBagLayout可实现复杂可控的布局。 以一个输入框为例: final JTextField username = new JTextField(); final JTextField password = new JTextField(); JPanel regist = new JPanel(); regist.setLayout(new GridBagLayout()); regist.add(new JLabel("username:"), new... 阅读全文

posted @ 2011-11-11 19:02 心笑峰 阅读(1985) 评论(0) 推荐(0) 编辑

JAVA Timer and task
摘要:JAVA里面有时候需要定期地处理某些任务,例如:定期地查询数据库提取数据;定期地清理超时数据;定期地将内存中数据存到数据库。 一种方法是自己写线程,自己控制。另一种方法就是利用java.util.Timer 和 java.util.TimerTask 来实现。下面就以一个将队列中数据定期存入数据库的例子展示这种用法:import java.util.TimerTask;import java.util.Timer;public class Myservice{ private Queue<String> logs = new LinkedBlockingQueue<Strin 阅读全文

posted @ 2011-11-10 17:36 心笑峰 阅读(7160) 评论(0) 推荐(0) 编辑

JAVA 随机字符串
摘要:public class StringUtils{ private static Random randGen = new Random(); private static char[] letters =("0123456789abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray(); //获取指定长度的随机字符串 public static String randomString(int len){ if(len<1){ ... 阅读全文

posted @ 2011-11-03 20:28 心笑峰 阅读(202) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示