Java
文章平均质量分 73
Ricky_Fung
「Stay hungry. Stay foolish.」
展开
-
Java NIO使用及原理分析(二)
转载自:李会军•宁静致远在第一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如果我们使用get()方法从缓冲区获取数据或者使用put()方法把数据写入缓冲区,都会引起缓冲区状态的变化。本文为NIO使用及原理分析的第二篇,将会分析NIO中的转载 2012-12-26 11:08:34 · 957 阅读 · 0 评论 -
Java NIO使用及原理分析(三)
转载自:李会军•宁静致远在上一篇文章中介绍了缓冲区内部对于状态变化的跟踪机制,而对于NIO中缓冲区来说,还有很多的内容值的学习,如缓冲区的分片与数据共享,只读缓冲区等。在本文中我们来看一下缓冲区一些更细节的内容。缓冲区的分配在前面的几个例子中,我们已经看过了,在创建一个缓冲区对象时,会调用静态方法allocate()来指定缓冲区的容量,其实调用 allocate()转载 2012-12-26 11:11:30 · 1057 阅读 · 0 评论 -
Java NIO使用及原理分析 (一)
转载自:李会军•宁静致远最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下,顺便写点东西,就当是自己学习 Java NIO的笔记了。本文为NIO使用及原理分析的第一篇,将会介绍NIO中几个重要的概念。在Java1.4之前的I/转载 2012-12-26 11:05:29 · 1183 阅读 · 0 评论 -
Java NIO使用及原理分析 (四)
转载自:李会军•宁静致远在上一篇文章中介绍了关于缓冲区的一些细节内容,现在终于可以进入NIO中最有意思的部分非阻塞I/O。通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据。同样,写入调用将会阻塞直至数据能够写入。传统的Server/Client模式会基于TPR(Thread per Request),服务器会为每个客户端请求建立一个线程,由该线程单独负责处转载 2012-12-26 11:12:59 · 1106 阅读 · 0 评论 -
Java 打jar包
打开命令提示符(win2000或在运行筐里执行cmd命令,win98为DOS提示符),输入jar -help,然后回车(如果你已经配置了jdk1.1或以上版本),如下:用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files选项:-c 创建新的存档-t原创 2013-01-24 11:29:26 · 1103 阅读 · 0 评论 -
Java项目源码打成jar包
方法一:通过jar命令jar命令的用法:下面是jar命令的帮助说明:用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...选项包括: -c 创建新的归档文件 -t 列出归档目录 -x 解压缩已归档的指定(或所有转载 2013-01-24 14:56:31 · 1946 阅读 · 0 评论 -
Java 十进制 转 二进制、八进制、十六进制
JDK中已经帮我们实现了十进制 转 二进制、八进制、十六进制的功能,使用Integer.toBinaryString(x)、Integer.toOctalString(x)、Integer.toHexString(x) 即可将x转换为对应的二进制、八进制、十六进制形式。我们也可以通过位移运算来实现求二进制、八进制、十六进制的功能。示例代码@Test public void tes原创 2013-02-01 11:29:23 · 2901 阅读 · 0 评论 -
JAVA基础(JAVA移位运算符)
移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:>(带符号右移)和>>>(无符号右移)。 在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次原创 2013-01-31 12:12:58 · 1277 阅读 · 0 评论 -
Java逻辑运算符
在Thinking in Java第三章中的一段话: 移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都原创 2013-01-31 16:32:38 · 1184 阅读 · 0 评论 -
Java 十六进制字符与byte数组转换
最近项目中需要把字节数组转换为十六进制数的形式,研究了好久终于实现了,分享一下字节数组与十六进制字符串之间的相互转换/** * Convert byte[] to hex * string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。 * @param src * @return */原创 2013-02-01 11:02:38 · 5642 阅读 · 0 评论 -
Java List排序
需求:对学生对象按照其 分数(降序)进行排序,当分数相同时按学号(从小到大)排序实现:利用Collections类的 sort(List list,Comparator c) 方法,自定义比较器对象对指定对象进行排序代码实现Student类class Student{ private int id; private String name; private原创 2013-01-22 11:03:13 · 1938 阅读 · 0 评论 -
Java Map 按Key排序和按Value排序
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。1、按键排序jdk内置的java.util包下的TreeMap既可满足此类需求,向其构造方法 TreeMap(Comparator comparator) 传入我们自定义的比较器即可实现按键排序。实现代码publi原创 2013-01-22 11:01:53 · 23210 阅读 · 0 评论 -
Part I — 深入浅出Java垃圾回收机制
来源:http://www.importnew.com/1993.html成为JavaGC专家Part I — 深入浅出Java垃圾回收机制 英文原文:cubrid,编译:ImportNew- 王晓杰对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java转载 2013-03-04 17:05:49 · 1046 阅读 · 0 评论 -
java 正则匹配 Pattern
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果会更佳). Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法原创 2013-03-05 19:39:12 · 3135 阅读 · 0 评论 -
HttpClient4.1 使用示例
一、HttpClient简介HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpCl原创 2013-03-05 12:00:29 · 5789 阅读 · 0 评论 -
Java 过滤Html标签示例
最近在公司负责网络爬虫这块,需要过滤文本结果中的Html标签,研究了一下实现了该功能。示例代码package com.yulore.ex;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;public class HTMLFilterTest { @原创 2013-03-08 14:48:51 · 2296 阅读 · 0 评论 -
Java 数据结构之 Queue(队列)
在JDK 1.5 中新增加了java.util.Queue接口,用以支持队列的常见操作。public interface Queueextends Collection队列除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或false,具体取决于操作)。插入操作的后一种原创 2013-02-22 11:08:39 · 4081 阅读 · 0 评论 -
java使用代理发送http请求
最近公司需要去XXX网站爬取某些分类下的商铺信息,访问速率过快的时候容易被站点查封本机IP,要求输入验证码,不得已采用代理IP机制来访问。出于公司机密考虑,IP给屏蔽了,大家可以自己去网上找代理IP来使用。示例代码package com.yulore.httpclient;import org.apache.http.HttpEntity;import org.apache.原创 2013-03-05 20:05:51 · 12363 阅读 · 1 评论 -
Java 数据结构之 Stack(栈)
栈是重要的数据结构,从数据结构角度看,栈也是线性表,其特殊性在栈的基本操作是线性表的子集。Stack作为最基本的数据结构,在JDK代码中,也有它的实现,java.util.Stack类是继承了Vector类,来实现了栈的基本功能。 一、栈的基本原理 栈(Stack)是限定仅在表尾进行插入或者删除操作的线性表。因此,对于栈来说,表尾端有特殊含义,成为栈顶,表头称之为栈原创 2013-03-08 15:40:40 · 15960 阅读 · 1 评论 -
Java 数据结构之Deque(双向队列)
一个线性 collection,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,通常读为“deck”。大多数Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形原创 2013-03-08 15:16:44 · 53456 阅读 · 3 评论 -
使用HttpClient下载网络图片
最近公司业务需求,需要去XX网站爬取数据,爬取速度过快时,会导致当前IP被封锁,让用户输入验证码。目前使用OCR识别图片验证码并提交,故需要下载验证码图片,研究了一下终于给实现了。在这里分享一下,希望对大家有用!DownloadPictureTest类package com.yulore.checkcode;import java.io.File;import jav原创 2013-03-14 17:31:38 · 16618 阅读 · 1 评论 -
httpclient Circular redirect to 'http://xxx.com'
异常信息如下:[-->org.apache.http.client.ClientProtocolExceptionat org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:822)at org.apache.http.impl.client.AbstractHttpClient.e原创 2013-03-15 20:29:44 · 4830 阅读 · 2 评论 -
HttpClient URL 重定向
最近由于公司业务需求,临时从android 改到了 网络爬虫方面的研究,小公司伤不起呀!在爬取XX网站的时候某些页面会发生URL重定向,重定向的URL包含特殊字符导致访问异常。在网上找了一些资料,研究了一下终于给解决了,分享给大家!HttpClient 4.0之前版本重定向需要手工处理,4.0以后默认会执行重定向操作,所以需要让它不执行重定向,而由我们自己来处理重定向请求。实现代码如下原创 2013-03-15 17:03:15 · 10467 阅读 · 3 评论 -
pinyin4j获取汉字正确的全拼和简拼
最近公司开发一个项目,需要获取汉字的拼音然后根据拼音来实现快速搜索。Java方面有PinYin4j开源项目获取汉字的拼音,但是对多音字处理的不好,自己研究了一下,终于给解决了。在这里跟大家分享一下!工程目录结构如下原理:将可能出现的多音字 词组组合起来,用正确拼音当作其key,词组当作value,保存到一个Map集合中。使用PinYin4j获取汉字拼音时判断原创 2013-01-22 20:47:38 · 13675 阅读 · 6 评论 -
Java 使用正则表达式过滤字符串中的特殊字符
最近在公司做爬虫这方面的工作,接触正则比较多一点,有一个业务需求需要过滤掉字符串中的所有特殊字符,研究了一下,终于给实现。package com.xx.filter;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;public class StringFilte原创 2013-04-07 17:40:57 · 11820 阅读 · 2 评论 -
Java 反射(Reflection)
待完成。。。原创 2013-03-26 16:21:33 · 1638 阅读 · 0 评论 -
Java 注解(Annotation)
一、概念 Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。 更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的。Annontation像一种修饰符一原创 2013-03-25 21:46:55 · 1339 阅读 · 0 评论 -
Java 动态代理(JDK&CGLib)
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种:静态代理:由程序员创原创 2013-03-26 18:36:16 · 1273 阅读 · 0 评论 -
Apache POI 操作Office文档(Excel,Word)
待完成。。。原创 2013-03-27 18:25:06 · 1825 阅读 · 0 评论 -
Java volatile 和 transient 关键字
一、Java volatile关键字Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。原创 2013-04-11 20:07:01 · 1173 阅读 · 0 评论 -
Java 动态编译(Dynamic Compiling)
待完成原创 2013-04-11 20:11:30 · 1423 阅读 · 0 评论 -
Log4j 为单独的类生成单独的日志文件
最近公司项目需要去网络上下载图片,根据不同情形将日志保存到不同的文件中。具体说就是普通的日志信息输出到一个单独的文件,图片下载失败的日志单独保存到另一个文件中,以便后期回溯。log4j配置文件log4j.rootLogger=info, stdout#Root Loggerlog4j.appender.stdout=org.apache.log4j.ConsoleAppen原创 2013-04-24 11:19:54 · 8261 阅读 · 0 评论 -
Java 文件合并
最近公司项目需要将一个大文件分割成若干个小文件进行处理,处理完毕之后将所有的小文件合并为一个文件。示例代码package com.xx.test;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;imp原创 2013-04-24 14:48:37 · 3342 阅读 · 0 评论 -
Java 按行切割文件
最近公司项目需要把一个大文件按行分割为若干个小文件,对每一个小文件进行单独处理,以提高效率。SplitFileTest.javaimport java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import原创 2013-04-24 11:49:23 · 3817 阅读 · 2 评论 -
httpclient http连接池
HttpClient4.x之前没有连接池的概念,多少次请求就会建立多少个IO,在访问量巨大的情况下服务器的IO可能会耗尽。最新HttpClient4.2有连接池的东西在里头,使用PoolingClientConnectionManager,具体可以参考官方文档,里面有详细介绍。关于PoolingClientConnectionManager 介绍原文是这样的:PoolingCl原创 2013-04-26 15:03:30 · 6380 阅读 · 1 评论 -
Java Runtime.exec() 使用
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。 应用程序不能创建自己的 Runtime 类实例。我们可以通过 Runtime.exec()用来执行外部程序或命令Runtime.exec() 有四种调用方法 * public Process exec(String command);原创 2013-05-15 23:02:16 · 4246 阅读 · 0 评论 -
Java 多文件夹合并
之前已经完成了单个文件夹的拷贝功能,在此基础上很容易实现多个文件夹的合并了,套一个for循环就可以啦!package com.xx.test.copy;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileI原创 2013-05-07 18:25:29 · 2996 阅读 · 0 评论 -
Java异常处理机制
本文从Java异常最基本的概念、语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则。并且作者提出了自己处理一个大型应用系统异常的思想,并通过设计一个异常处理的框架来论述此思想。一、异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处理转载 2013-04-27 10:23:50 · 2127 阅读 · 0 评论 -
Java 内存管理机制与内存泄露
一、Java内存管理机制在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期。从申请分配、到使用、再到最后的释放。这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露。Java语言对内存管理做了自己的优化,这就是垃圾回收机制。Java的几乎所有内存对象都是在堆内存上分配(基本数据类型除外),然后由GC(garbage转载 2013-04-26 14:38:51 · 1444 阅读 · 0 评论 -
Java 判断文件的字符集编码
最近负责处理一批文件数据,有的文件很大普通的文本编辑器打不开,导致不知道其所属编码。于是乎想通过写程序判断,分享一下。原理:通过获取文件的前三个字节来判断,Unicode编码 前两个字节为FFFE; Unicode big endian编码的前两字节为FEFF;UTF-8编码的前两字节为EFBB;代码:package com.xx.test;import jav原创 2013-05-06 18:20:22 · 17471 阅读 · 8 评论