两个角度看JAVA的IO流_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 两个角度看JAVA的IO流

两个角度看JAVA的IO流

 2012/3/22 12:52:25  美丽的小岛  程序员俱乐部  我要评论(0)
  • 摘要:这个存在心中的顾虑,在某个时候有一点放宽。本来觉得io流已经掌握了,可是当用起来那时,还是显得没有那么得心应手。古语有云:横看成岭侧成峰。一个问题,从多几个角度去看的话,会觉得明白很多。从一个侧面到另外一个侧面去看。两个角度:一个角度,decorator设计模式;另一个从传统学习的知识完备性出发(API)。一、Decorator设计模式看IOUML图很明显了,下面看一个Cat例子:对应于上图:Cat-----ComponentpublicinterfaceCat{voidbehavior();
  • 标签:Java

??? ?这个存在心中的顾虑,在某个时候有一点放宽。本来觉得io流已经掌握了,可是当用起来那时,还是显得没有那么得心应手。古语有云:横看成岭侧成峰。一个问题,从多几个角度去看的话,会觉得明白很多。从一个侧面到另外一个侧面去看。

两个角度:一个角度,decorator设计模式;另一个从传统学习的知识完备性出发(API)。

?

一、Decorator设计模式看IO

?????

?decortor

?

?UML图很明显了,下面看一个Cat例子

对应于上图:

Cat-----Component

public interface Cat {
	void behavior();
}

?

SmallCat----ConcreteComponent

public class SmallCat implements Cat {
	private String name;

	SmallCat() {
	}

	SmallCat(String name) {
		this.name = name;
	}

	public void behavior() {
		// TODO Auto-generated method stub
		System.out.print("I'm small cat! My name is " + name);
	}
}

?

Decorator----Decorator

public interface Decorator extends Cat {
	public void add() ;
}

?

DecoratorDress----ComcreteDecorator1

public class DecoratorDress implements Decorator {
	private Cat cat;

	public DecoratorDress(Cat cat) {
		this.cat = cat;
	}

	public void behavior() {
		cat.behavior();
		add();
	}

	public void add() {
		System.out.print(",dressing");
	}
}

?

DecoratorGlasses-----ComcreteDecorator2

public class DecoratorGlasses implements Decorator {
	private Cat cat;

	DecoratorGlasses(Cat cat) {
		this.cat = cat;
	}

	public void add() {
		System.out.print(",glassing");
	}

	public void behavior() {
		cat.behavior();
		add();
	}
}

?

main函数:

public class TestMain {
        public static void main(String[] args) {
              Cat scat = new SmallCat("xiao hua") ;
              DecoratorDress DressCat = new DecoratorDress(scat);
              DecoratorGlasses GlassesCat = new DecoratorGlasses(dcat) ;
              GlassesCat.behavior();		
	}
}

?

这里造了一个猫,然后,让这个小猫穿上衣服,再让它带上眼镜的。呵呵。。。。

言归正传,看看这个io是一个怎样一回事情,他们是这个关系:

这里有四个东西InputStream,OutputStream,Reader,Writer这个接口就构成了JAVA的IO上层。

四个的结构模式都是一样的,用InputStream来举一个例子:

InputStream----Component

FileInputStream同层之类的数据源等-----ComreteComponent

FilterInputStream过滤器----Decorator

DataInputStream同层之类等----ComreteComponent

这样就构成了。

看一例:昨天写的用JAVA实现的简单聊天,用一个client端的代码.

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client01 {
	public static void main(String[] args) throws Exception {
		DataInputStream dis = null;
		System.out.println("client start..");
		Socket socket = new Socket("127.0.0.1", 8888);
		String str = null;
		while (true) {
			System.out.print("I say:");
			str = new BufferedReader(new InputStreamReader(System.in))
					.readLine();// 读入字符
			if (str.equalsIgnoreCase("88")) {
				break;
			}
			new DataOutputStream(socket.getOutputStream()).writeUTF(str);// 发送数据
			dis = new DataInputStream(socket.getInputStream());// 读入服务器信息
			System.out.println("server say:" + dis.readUTF());// 显示服务器信息
		}
		dis.close();
		socket.close();
	}
}

?这里就会看到很多的流的一个接一个情况。呵呵,写的时候头真的有点而昏。这个还得去配合Server端的。

?

好啦,这个就总结到这里了。

?

?

二 、功能分类看IO

???? 这个为了记忆,采用了下面这个方法去记忆了,IO流很多内容,但是想用得顺手还得去记得,还得去敲出来,下面这个从另一个角度看看IO,总结出这个树,没有考究过完整性,常用的估计也包括了。

?

|--基础流(从特定的数据源读写数据,目的:建立一个数据源)

??????? |--File? (文件源)

|--FileReader(FileWriter)

|--FileInputStream(FileInputStream)

|-Memory Array内存数组源)

|--CharArrayReader(CharArrayWriter)

|--ByteArrayInputStream(ByteArrayOutputStream)

???????? |--Memory String (字符串源)

???????? ???????? |--StringReader(StringWriter)

?????????????????? |--(对于字符串,字节没有必要有)

???????? |--Pipe(管道源)

?????????????????? |--PipedReader(PipedWrite)

?????????????????? |--PipedInputStream(PipedOutputStream)

|--高级流(连接在已经存在的流(节点流或处理流)之上,目的:让程序对数据的处理为程序提供更为强大的读写功能)

???????? |--Buffering(把数据源读到绶存,用来对数据的缓冲,目的:提高读写效率)

?????????????????? |--BufferedReader(BufferedWriter)

?????????????????? |--BufferedInputStream(BufferedOutputStream)

???????? |--Coverting (目的:让数据由字节向字符转换)

?????????????????? |--InuputSteamReader(OutputStreamWriter)

?????????????????? |--(没有字符流转成字节流的,这个可以用String中的getByte()函数)

???????? |--Data conversion(对特殊数据字节数处理(数据类型流))

?????????????????? |--(数据是与字符平起平坐的,不用经过字符,再去变成数字)

?????????????????? |--DataInputStream(DataOutputStream)

???????? |--Object Serialization

?????????????????? |--(解释同数据转换)

?????????????????? |--ObjectInputStream(ObjectOutputStream)

|--Printing(实现一个标准的输出,不分数据类型的,没有涉及到输入流的,不会有抛出出的异常)

?????????????????? |--PrintWriter()

?????????????????? |--PrintStream()

?

?

?? 好了,这个是我的一点java学习总结,分享交流一下,还存在不足,请各位指教。

?

发表评论
用户名: 匿名