- 浏览: 480826 次
- 性别:
- 来自: 西安
-
文章分类
最新评论
-
752258:
...
Java文件操作(FIle类) [转] -
darrendu:
帮我解决了问题
启动出了问题:unexpected inconsistency;RUN fsck MANUALLY -
_lostman:
怎么反着来?
如果我现有一个第三方的库,如何在JAVA中调用? ...
java中JNI调用c++的dll -
caoruntao:
brother涛,你太牛了。博客访问量竟然有6W多。不得了呀
java clone -
passlicense:
好文章!顶~
unicode和ISO 8859-1
[转]http://hzxdark.iteye.com/blog/40133
我不知道各位是师弟师妹们学java时是怎样的,就我的刚学java时的感觉,java.io包是最让我感到一头雾水的。所以现在这篇文,尽可能简单地描述java.io包的结构,希望对java.io同样一头雾水的师弟师妹们有些帮助^_^
我开始学java时,java.io的介绍是在《java编程思想》里看的。说实话,当时完全看不明白——“java.io的是用‘decorator模式’来构建的”——刚学java时,天知道啥玩意叫decorator……
不过要明白java.io,确实需要理解decorator设计模式,下面详细介绍下。
所谓decorator,装饰,其实可以说是一种设计的技巧,说白了没什么难的,别看很多网上资料说的天花乱坠的(非常讨厌有些文章总是把简单的问题描述得跟两头猪的kiss问题一样复杂……)。
decorator的结构如下:
MyInterface
|
_______|_______
| |
Myclass Decorator
____|_____
| |
DecoratorA DecoratorB
decorator的目的是在不改变任何原有的类的基础下,添加新的功能(你可以理解为书上说的灵活性)。其中Myclass是你要扩展的类,DecoratorA跟DecoratorB封装了你要扩展的功能,并保存有一个MyInterface的引用。
考虑以下代码:
public static void main(Strings[] arg){
myInterface a = new myClass();
a.print();
}
myInterface 是myClass的接口,只声明了一个方法print(),myClass实现了该方法:
public void print(){
System.out.println("hello");
}
那么假如我们要在不改变原来的myClass的基础上,变成输出“hello world!”,要怎么做呢?
当然我们可以考虑直接写个myClass的子类,helloClass之类,但是要是要求根据环境不同,输出"hello world!",my hello world","my Hello"之类的组合呢?
用继承的方式将不得不写一堆类似的子类来。
decorator,装饰模式的解决方法是,只实现基本的功能,把附加的功能抽出来放一边。
例如以下代码:
class DecoratorA implements Decorator{
MyInterface myObject;
DecoratorA(myInterface myObject){
this.myObject = myObject;
}
public void print(){
myObject.print();
System.out.print("world!");
}
}
class DecoratorB implements Decorator{
MyInterface myObject;
DecoratorA(myInterface myObject){
this.myObject = myObject;
}
public void print(){
System.out.print("my");
myObject.print();
}
}
DecoratorA和DecoratorB的功能分别是打印出world跟my。这时main函数要打印出my hello world可简单变为:
public static void main(Strings[] arg){
MyInterface a =new DecoratorA(new DecoratorB(new MyClass());
a.print();
}
简单吧?简单的说,就是:
print(){
print("xxx");//可替换成你要添加的任何处理;
myObject.print();//调用基础类的函数;
xxxx; //后续处理
}
Decorator的介绍就到此为止,接下来讲java.io.
看到
MyInterface a =new DecoratorA(new DecoratorB(new MyClass());
是不是觉得眼熟咧?这跟
BufferedInputStream bis = new BufferedInputStream(new DataInpuStream(new FileInputStream("xxx.txt")));
是不是很像?
(画外音加一个臭鸡蛋扔上来:因为java.io就是用decorator模式组织的,当然像啦……)
java.io分Stream跟reader、writer两大类,这里只详细介绍Stream,并最后两者间的关系。Stream又分inputStream、OutputStream,两者基本是对称的,这里也只介绍InputStream.
java.io.InputStream
|
_______________________|________________________
| |
ByteArrayInputStream FilterInputStream
StringBufferInputStream _____________________|____________________________
FileInputStream | | | |
PipedInputStream DataInputStream BufferedInputStream LineNumInpuStream XXX
(注:xxx是PushbackInputStream,上面的图放不下)
这个图跟最初介绍的hello world的图很像吧?呵呵。
基础的流只有左边4个,这些流代表了数据的来源,所有的流都必须从这四个中之一开始。(注,还有一个RandomAccessFile、File,这两个不在本文介绍范围)。
然后当我们需要什么添加功能,就从右边中选择一个装饰。例如,我们需要缓存功能,那么需要bufferedInputStream装饰:
BufferdInputStream is = new BufferedInputStream(new FileInputStream("xxx.txt"));
假如再要DataInputStream的功能,只要在加一层:
DataInputStream dis = new DataInputStream(new BufferdInputStream(new FileInputStream));
(厄,我不甚明白这个类添加的功能是做什么用的,资料说是增加读取java原生数据的功能,不甚明白,有清楚的来补充一下,pipeInputStream跟sequenceInputStream也没用过,欢迎补充说明)
这里你可以想象成,在基本的FileInputStream.readxxx()方法在BufferedInputStream的readxxx()方法调用,并添加相应的处理。
最后说说InputStream跟reader的区别:
老实说,我只知道一个支持字节流,一个支持unicode流,除此之外有啥米性能上的不同我还真不知道,哈哈。知道的快来补充补充~
发表评论
-
java clone
2012-02-27 17:12 1361【转】http://zhengjunwei2007-163-c ... -
Java程序性能优化
2012-02-27 17:02 822一、避免在循环条件中使用复杂表达式 在不做编译优化的情况 ... -
Java 访问权限
2012-02-27 16:54 1229[转]http://www.cnblogs.com/itao/ ... -
Java方法继承、方法重载、方法覆盖小总结
2012-02-27 16:42 1152[转] http://blog.csdn.net/c ... -
关于 java 您不知道的 5 件事 系列
2011-08-31 15:16 845http://www.ibm.com/developerwor ... -
ConcurrentHashMap与CopyOnWriteArrayList比较
2011-08-31 15:10 1325【转】http://www.iteye.com/t ... -
ConcurrentHashMap Collections.synchronizedMap和Hashtable讨论
2011-08-31 15:09 1184[转]http://www.w3china.org/blog/ ... -
JAVA的Random类
2011-08-30 15:22 878【转】http://www.cnblogs.com ... -
Direct vs non-direct ByteBuffer
2011-08-30 14:55 1181[转]http://littcai.iteye.com/blo ... -
详细介绍Java垃圾回收机制
2011-08-29 22:57 1263【转】http://developer.51cto.com/a ... -
System.gc() 和System.runFinalization()
2011-08-29 22:52 1621The Java language provide ... -
Java对象的强、软、弱和虚引用
2011-08-29 21:43 914[转]http://developer.51cto.com/a ... -
java对象,引用,实例
2011-08-22 11:05 597[转]http://jzgl-javaeye.iteye.co ... -
垃圾收集解析
2011-08-22 09:15 814[转]http://www.cnblogs.com/rolle ... -
Java对象序列化ObjectOutputStream和ObjectInputStream示例
2011-08-21 16:23 1085[转]http://sjsky.iteye.com/blo ... -
Java i++原理及i=i++的问题说明
2011-08-20 16:21 1599[转]http://blog.sina.com.cn/s/bl ... -
Java中的transient,volatile和strictfp关键字
2011-06-21 16:36 968转:http://www.iteye.com/topic/52 ... -
如何使用Proxy模式及Java内建的动态代理机制
2011-06-09 20:09 9411.Proxy模式 代理模式支持将某些操作从实际的对象中 ... -
System.load和System.loadLibrary
2011-05-24 21:49 1468转:http://hi.baidu.com/mynetbean ... -
static块到底什么时候执行?
2011-05-19 18:34 1233转:http://www.iteye.com/topic/11 ...
相关推荐
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax....
下面针对书客编辑器安卓Java版,进行详细的解说。效果图在进行讲解之前,首先看一下书客编辑器Android版的效果图一、引入资源引入书籍编辑器Android Java版的方式有很多,这里主要提供两种方式1、在build.gradle文件...
代码可能使用了Java的`java.net.URL`类来处理URL,`java.io`包进行文件读写,以及可能使用了`Jsoup`库来解析HTML文档,因为`Jsoup`是Java中一个非常流行的HTML解析库,能方便地提取和操作HTML元素。 接下来,我们来...
Java入门笔记文档详细阐述了Java编程语言的基本概念、开发工具、编程基础、面向对象编程、多线程、集合框架、IO流、网络编程、安全加密、反射机制、新特性、内存管理等多个方面,为初学者提供了一条通往Java编程世界...
Java提供了一系列的File类和IO流用于文件操作,包括读取配置文件、保存用户数据等。 7. **版本控制**:项目的源代码管理可能使用了Git,这是一种分布式版本控制系统,有助于团队协作和代码版本管理。 8. **构建...
使用 `dojo.require` 声明所需的模块或包,类似于 Java 或 C# 中的导入语句。如果未声明且模块不在默认加载的范围内,则会引发脚本错误。 - **预整合包**: - Dojo 提供了针对不同需求的预整合包,如 Ajax 版本和 ...
下面将详细解说其中的知识点: 1. 文件IO操作(输入输出) 实验报告中提到了文件IO操作的学习,这是Java语言中处理文件和目录的基础知识。文件IO操作包括创建、删除、重命名文件或目录。具体方法例如`File`类的`...
6. **输入/输出流**:Java的IO流系统涵盖了文件读写、网络通信等内容,书中会介绍基本的字节流和字符流,以及缓冲流、对象流和文件操作。 7. **集合框架**:Java集合框架提供了多种数据结构,如ArrayList、...
耿祥义版的Java课程设计源代码是一份非常有价值的参考资料,它由知名讲师耿祥义精心编排,涵盖了多个编程实例,每个例子都配备了详细的源代码解说,帮助学习者更好地理解和应用Java编程概念。 1. **Java基础知识**...
这个项目包含了详细的解说文档和数据库相关资料,为学员提供了一个全面理解软件开发流程的机会。 一、Java基础与进阶 在该项目中,学员将回顾并深化Java基础知识,如面向对象编程(OOP)概念,包括类、对象、封装、...
C++ IO流库教程资料 PDF,包括了一些关于IO流库的问答和解说,后面附有IO流库的基础知识介绍,其中并附有了丰富的代码实例来说明问题,若需要了解详细的C++ IO流相关知识,这个小册子还是不错的。
文档《linux创建用户、文件夹、用户组的添加和删除的命令及解说.docx》涵盖了这些基本操作,例如`useradd`、`groupadd`、`mkdir`、`rm`、`chown`、`chmod`等。 六、问题调试与优化 1. **日志查看**:通过检查...