摘要: 什么是IO流?byte序列的读写,Java中的IO流是实现输入/输出的基础.Java将数据从源(文件、内存、键盘、网络)读入到内存 中,形成了流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分。2、分类按照不同的分类标准,IO流分为不同类型。主要有以下几种方式:按照数据流方向、数据处理的单位和功能。还有一些分类比如:对象流、缓冲流、压缩流、文件流等等。其实都是节点流和处理流的子分类。不管流的分类是多么的丰富和复杂,其根源来自于四个基本的类。这个四个类的关系如下:字节流字符流输入流InputStreamReader 阅读全文
posted @ 2012-09-25 16:30 曾先森在努力 阅读(1836) 评论(0) 推荐(0) 编辑
摘要: 许 令波, Java 工程师, 淘宝网简介:I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代,数据在网络中随处流动。这个流动的过程中都涉及到 I/O 问题,可以说大部分 Web 应用系统的瓶颈都是 I/O 瓶颈。本文的目的正是分析 I/O 的内在工作机制,你将了解到:Java 的 I/O 类库的基本架构;磁盘 I/O 工作机制;网络 I/O 的工作机制;其中以网络 I/O 为重点介绍 Java Socket 的工作方式;你还将了解到 NIO 的工作方式,还有同步和异步以及阻塞与非阻塞的区别,最后我们将介绍一些常用的关于 I/O 的优化技巧。Java 阅读全文
posted @ 2012-09-25 16:25 曾先森在努力 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 接上次写的《java IO整理》http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html这次是关于java nio,有一些重复的发的地方。本文中的源代码可以在此处下载,下载链接为:http://115.com/file/cltlj10i#nio-src.zip本文简介: JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地介绍了 NIO 库。您将学到诸如缓冲区和通道这样的关键 I/O 元素的知识,并考察更新后的库中的标准 阅读全文
posted @ 2012-09-25 16:19 曾先森在努力 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 当前类 同一package 子孙类 其他packagepublic √ √ √ √protected √ √ √ ×friendly √ √ × ×private √ × × ×不写时默认为friendly2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类, 阅读全文
posted @ 2012-09-25 16:14 曾先森在努力 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 简介:本文主要探讨了 java.lang.ref 包的使用方法,以及源码解读。并就该包在不同 JVM 上的表现进行了比较与分析。通过阅读本文,读者可以加深对 java.lang.ref 的理解,从而在开发中更好地利用该包。概述Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Java 垃圾回收器密切相关的引用类。这些引用类对象可以指向其它对象,但它们不同于一般的引用,因为它们的存在并不防碍 Java 垃圾回收器对它们所指向的对象进行回收。其好处就在于使者可以保持对使用对象的引用,同时 JVM 依然可以在内存不够用的时候对使用对象进行回收。因此这个包在用来实现与缓存相 阅读全文
posted @ 2012-09-25 16:13 曾先森在努力 阅读(166) 评论(0) 推荐(0) 编辑
摘要: Java中的IO整理文章写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面。照旧,文章依旧以例子为主,因为讲解内容的java书很多了,我觉的学以致用才是真。代码是写出来的,不是看出来的。最后欢迎大家提出意见和建议。【案例1】创建一个新文件?1234567891011import java.io.*; class hello{ public static void main(String[] args) { File f=new File("D:\\hello.txt& 阅读全文
posted @ 2012-09-25 16:02 曾先森在努力 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 在开发Java程序,尤其是Java EE应用的时候,总是免不了与各种配置文件打交道。以Java EE中典型的S(pring)S(truts)H(ibernate)架构来说,Spring、Struts和Hibernate这 三个框架都有自己的XML格式的配置文件。这些配置文件需要与Java源代码保存同步,否则的话就可能出现错误。而且这些错误有可能到了运行时刻才被发 现。把同一份信息保存在两个地方,总是个坏的主意。理想的情况是在一个地方维护这些信息就好了。其它部分所需的信息则通过自动的方式来生成。JDK 5中引入了源代码中的注解(annotation)这一机制。注解使得Java源代码中不但可以包含 阅读全文
posted @ 2012-09-24 10:55 曾先森在努力 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 一、概念 注解: Java中的注解是Java源代码的元数据,也就是说注解是用来Java源代码的,基本语法就是 @后面跟注解的名称。JDK5.0以上版本都支持,有预定义注解,也可自定义注解。Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的。Annontation像一种修饰符一样,应用于包、类型、构造方法、方法、成.. 阅读全文
posted @ 2012-09-24 10:39 曾先森在努力 阅读(589) 评论(0) 推荐(0) 编辑
摘要: 一篇不错的讲解Java异常的文章六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 java.sql.Connection conn = ... 3 try { // ⑸ 4 Statement stat = conn.createStatement(); 5 ResultSet rs = stat.executeQuery( 6 "select uid, name from user"); 7 whil 阅读全文
posted @ 2012-09-23 20:55 曾先森在努力 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 本文从Java异常最基本的概念、语法开始讲述了Java异常处理的基本知识,分析了Java异常体系结构,对比Spring的异常处理框 架,阐述了异常处理的基本原则。并且作者提出了自己处理一个大型应用系统异常的思想,并通过设计一个异常处理的框架来论述此思想。 一、 异常的概念和Java异常体系结构 异常是程序运行过程中出现的错误。本文主要讲授的是Java语言的异常处理。Java语言的异常处理框架,是Java语言健壮性的一个重要体现。 Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中已经定义了许多异常类,这些异常类分为两大类, 阅读全文
posted @ 2012-09-23 20:41 曾先森在努力 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。 Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。 1.try:它里面放置可能引发异常的代码 2.catch:后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。 3.finally:主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件),异常机制总是保证finally块总是被执行。只有finally块,执行完成之后,才会回来执行try或 阅读全文
posted @ 2012-09-23 20:39 曾先森在努力 阅读(5421) 评论(2) 推荐(5) 编辑
摘要: 1. java.lang.NullPointerException(空指针异常) 调用了未经初始化的对象或者是不存在的对象经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)。2. java.lang.ClassNotFoundException 指定的类不存在这里主要考虑一下类的名称和路径是否正确即可,通常都是程序试图通过字符串来加载某个类时可.. 阅读全文
posted @ 2012-09-23 17:17 曾先森在努力 阅读(791) 评论(0) 推荐(0) 编辑
摘要: Java正则表达式在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。 可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛。 正则表达式的引擎已被许多普通的Unix工具所实现,包括grep,awk,vi和Emacs等。此外,许多使用比较广泛的脚本语言也支持正则表达式,比如Python,Tcl,JavaScript,以.. 阅读全文
posted @ 2012-09-23 11:07 曾先森在努力 阅读(584) 评论(0) 推荐(0) 编辑
摘要: Java编程语言是第一个设计成为全面支持国际化的语言。从一开始,它就具备了进行有效的国际化所必须的一个重要特征:使用Unicode来处理所有字符串。支持Unicode使得在Java编程语言中,编写程序来操作多种语言的字符串变得异常方便。多数程序员认为进行国际哈需要做的事情就是支持Unicode并在用户接口中对消息进行翻译。然而在实际的开发中,国际化一个程序所需要做的绝不仅仅是提供Unicode支持,它还包括日期、时间、货币和数字等格式上的差异。 1. Locales: 需要依赖国际化的两个主要格式化类为NumberFormat和DateFormat,它们在通过工厂方法获取其实现子类时,都会依. 阅读全文
posted @ 2012-09-23 10:54 曾先森在努力 阅读(379) 评论(0) 推荐(0) 编辑
摘要: Java国际化国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母。国际化又称本地化(Localization,L10N)。国际化相关的Java类Java国际化主要通过如下3个类完成java.util.ResourceBundle:用于加载一个资源包java.util.Locale:对应一个特定的国家/区域、语言环境。java.text.MessageFormat:用于将消息格式化国际化资源文件为实现程序的国际化,必须提供程序所需要的资源文件。资源文件的内容由key-value对组成。资源文件的 阅读全文
posted @ 2012-09-23 10:53 曾先森在努力 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 如果想要接收任意长度的数据,而且避免乱码产生,就可以使用BufferedReader类public class BufferedReader extends Reader因为输入的数据有可能出现中文,所以,此处使用字符流完成。BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中。System.in本身表示的是InputStream(字节流),现在要求接收的是一个字符流,需要将字节流变成字符流才可以,所以要用InputStreamReader 1 import java.io.BufferedReader; 2 import java.io.IOExcept 阅读全文
posted @ 2012-09-23 10:45 曾先森在努力 阅读(479) 评论(0) 推荐(0) 编辑
摘要: java 泛型的残酷现实就是:在泛型代码内部,无法获得任何有关泛型参数类型的信息。在使用泛型时,任何具体的类型都被擦除,唯一知道的是你在使用一个对象。比如:List<String>和List<Integer>在运行事实上是相同的类型。他们都被擦除成他们的原生类型,即List。snippet1: 1 package com.cognizant.ch15; 2 3 import java.lang.reflect.Array; 4 import java.util.Arrays; 5 6 public class ArrayMaker<T> { 7 privat 阅读全文
posted @ 2012-09-21 18:35 曾先森在努力 阅读(722) 评论(0) 推荐(0) 编辑
摘要: 这其中涉及Java泛型的实现机制和泛型擦除问题,详见下面文章。一、概述 Java泛型在使用过程有诸多的问题,如不存在List<String>.class, List<Integer>不能赋值给List<Number>(不可协变),奇怪的ClassCastException等。 正确的使用Java泛型需要深入的了解Java的一些概念,如协变,桥接方法,以及这篇笔记记录的类型擦除。Java泛型的处理几乎都在编译器中进行,编译器生成的bytecode是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。二、编译器如何处理泛型? 通常情况下,一个 阅读全文
posted @ 2012-09-21 18:23 曾先森在努力 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 我想这个问题的答案是:因为这样做会破坏类型安全。核心的问题在于Java范型和C#范型存在根本区别:Java的范型停留在编译这一层,到了运行时,这些范型的信息其实是被抹掉的;而C#的范型做到了MSIL这一层。Java的做法不必修改JVM,减少了潜在的大幅改动和随之而来的风险,也许同时也反映出Java Bytecode规范在设计之初的先天不足;C#则大刀阔斧,连CLR一起改以支持更彻底的范型,换句话说,在范型这一点上,感觉C#更C++一点。在Java中,Object[]数组可以是任何数组的父类,或者说,任何一个数组都可以向上转型成它在定义时指定元素类型的父类的数组,这个时候如果我们往里面放不同于原 阅读全文
posted @ 2012-09-21 17:56 曾先森在努力 阅读(293) 评论(0) 推荐(0) 编辑
摘要: List对象排序通用方法在数据库中查出来的列表中,往往需要对不同的字段重新排序,一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的list中排序,无疑会提高系统的性能。只要把第一次查出来的结果存放在session中,就可以对list重新排序了。一般对list排序可以使用Collections.sort(list),但如果list中包含是一个对象的话,这种方法还是行不通的。如果有下面这个对象:这是一个简单的数据对象,现在要对 1 //UserInfo.java 2 package test; 3 4 import java.text.SimpleDate. 阅读全文
posted @ 2012-09-21 17:45 曾先森在努力 阅读(1706) 评论(1) 推荐(0) 编辑