`
terrencexu
  • 浏览: 122531 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
文本输出应该比较常用,以前都是通过反复的创建InputStream, InputReader, OutputStream, OutputWriter等去输入输出文本,比较麻烦。 Apache提供了一个commons-io.jar包,里面有很多IO相关的工具,比如输入输出文本等,着实方便了很多。 比如读取一个文件:   // by FileUtils List<String> lines = FileUtils.readLines(file, "UTF-8"); // by IOUtils List<String> lines = IO ...
解析HTML,htmlparser是一个不错的选择,但是如果你初次使用,可能会不经意间遇到下面这个问题: org.htmlparser.util.EncodingChangeException: character mismatch (new:  [0xfeff] != old:  [0xefï]) for encoding change from ISO-8859-1 to UTF-8 at character offset 0   这个问题的原因是服务器端返回的字符集是ISO-8859-1,但是在你解析的网页中却有下面这么一句话:   <head> < ...

浅谈线程池

    博客分类:
  • Java
“什么是线程池?” “呃……”   “为什么要使用线程池?” “呃……”   “什么情况下使用线程池?” “呃……”   这三个问题,说好回答挺容易,说难回答挺难。   “什么是线程池?” “一组创建好的线程。”   “为什么要使用线程池?” “提高CPU吞吐量,提升系统性能。”   “什么情况下使用线程池?” “同时有多个请求或者多个任务需要处理,并且请求和任务会有block。”   当初这三个问题,问前辈的时候,前辈是这样告诉我的,没太听懂,感觉特牛逼,特玄乎,然后就不懂装懂了好长一段时间,后来想了想,这三个问题,前辈回答的还是不错的。   假设系 ...
多线程,并发,是经常遇到的问题,平时解决的方案也想过很多,比如说现在有1000行消息,需要开10个线程同时处理。   之前想过两个方案:   方案一: 一次开10个线程,每个线程处理一条消息,等10个线程全部处理结束之后,再开启下10个线程,直到全部处理完毕 缺陷:需要等待其他n - 1个线程结束后,才能同时启动下n个线程   方案二: 将1000行消息分割为10份,每100行用一个线程处理。 优点:无等待 缺陷: 分割不均,无法充分利用所有的线程   现在想想,上面两个缺点挺多,就又想了两种方案:   方案三:使用ConcurrentLinkedQueue<Ta ...

Java: CSVUtils

    博客分类:
  • Java
解析CSV文件,最简单,最直接,最突然的想法就是   "a,b,c,d".split(",")   但是如果复杂一点儿,加上一些特殊字符,比如引号“"”,逗号“,”,那你就会发现split(",")不灵光了。于是今天就闲着没事儿写了一个,没有完全测试,但是应该没问题,哈哈 package com.javaeye.terrencexu.csv import java.util.LinkedList; import java.util.List; public final class CSVUtils { ...
Cron这个词儿来源于希腊的一个表示时间的单词Chronos。在Linux上可以通过Cron设置schedule task,通过这种方式可以让你在每天半夜睡觉的时候自动备份你的文件或者文件夹等等,在自动化测试中可以很好的完成daily build的工作。   Cr ...
今天介绍一个如何通过Dom4J的Visitor模式替换XML文件中正则表达式的方法,感兴趣的话可以看看。   Vistor模式不是本文关注的重点,感兴趣可以看一下本文:http://www.patterndepot.com/put/8/visitor.pdf   Dom4J提供了一个接收Vistor的接口,可以通过自定义Vistor实现类对XML文件中的正则表达式进行替换,原理很简单,就不在此赘述了,直接上例子吧。   首先是XML配置文件: deployment.xml <deployment id="${deploy.id}"> < ...
学习Cobertura的起因是前天晚上媳妇儿(终于有出场机会了)突然问我有没有用过一些可以统计单元测试覆盖率的工具,答曰:木有...感觉比较丢人,于是昨天晚上研究了一把,今天顺便share一下。   因为之前没有用过这方面的工具 ...
今天闲着没事儿,研究了一把Apache Commons Discovery包,发现还不错,跟大家分享一下。   Discovery组件被用以查找可插拔接口的实现实例,它提供了一种通用的实例化这些实现的方式,而且可以管理单例(工厂)的生命周期。本质上来讲,就是定位那些实现了给定Java接口的类,并实例化。除此之外,Discovery还可以用以在给定的classpath中查找并加载资源文件。   Discovery组件在查找所有的实现类的时候需要预先将允许被查找的实现类配置到默认的配置文件中,默认的配置文件为: /META-INF/services/<YOUR Interface w ...
从名字上来看JBoss Cache很容易使人联想到JBoss Web服务器,但是实际上,你可以“认为”他们之间没有任何关系,学习使用JBoss Cache时不需要你对JBoss Web服务器有任何了解。   什么是JBoss Cache 就像它的名字所显示的那样,它是一种缓存。它被设计用来缓存那些经常被访问的Java对象,这样就可以明显的提高系统的性能,可以很轻松的解决掉数据访问的瓶颈,比如连接数据库等。   JBoss Cache是一种复制缓存,它可以自动与集群中的其他服务器同步状态,这样就可以保证在其中一台或者几台服务器突然挂掉之后恢复缓存,具有很高的可靠性能。   JBoss ...
        接着昨天的继续聊《工作两周年纪念日 - 随笔 (1)》,在工作的这段时间里,经历过很多事情,零零散散的总结过,但从没想过像现在这样把一些散碎的片段记录下来,偶然间写了一点儿之后,才发觉还是蛮想记录下自 ...
        不经意间看了一眼日历,发现今天是2010年07月07日,这个数字突然勾起了我太多的回忆,因为截至到今天我毕业后工作整整两年了,加上之前的实习的话,整2年零358天。           3年的时间经历过多个项目,也接触过很多技术,从最初的Java,到PHP, ASP.NET, Javascript, CSS,到现在又回归Java,其间经历了几多波折,也曾面临过很多程序员面临的问题:要不要改‘语言’?是做后端好还是前端好?是做开发好还是做测试好?每个问题都困扰过我很长时间,每次都跟上战场的似的要下很大的决心。现在回过头来想想自己经历过的事情,有的让自己莞尔一笑,有的又让自己无 ...
有时候我们希望在字符串中以设置类似变量的方式,替换字符串中需要变化的几个地方   1. 使用MessageFormat   String message = MessageFormat.format("My name is {0}, and now I am {1} years old", "Jimy", 24);  将返回:My name is Jimy, and now I am 24 years old.   2. 使用通配符 String message = "My name is %s, and now I am %d ...
在使用JAXB unmarshal XML的时候碰到了一个异常: Invalid byte 1 of 1-byte UTF-8 sequence public static Object unmarshal(InputStream xml, Class<?> clazz) { Object obj = null; try { JAXBContext jc = JAXBContext.newInstance(clazz.getPackage().getName()); Unmarshaller u = jc.createUn ...
接上文 JAXB:使用annotation绑定XML(xmlns)   在使用JAXB解析XML文件的时候我们有时候可能会需要通过schema文件验证XML的格式,接上文的XMLParser.java   示例代码如下: public static Object unmarshal(InputStream xml, Class<?> clazz) throws SAXException { Object obj = null; ValidationEventCollector vec = new ValidationEventCollector(); ...
Global site tag (gtag.js) - Google Analytics