------- android培训、java培训、期待与您交流! ----------
装饰设计模式
我个人理解这个模式与代理模式很类似,很可能它们是同一种模式吧,名字不同而已?
此模式的特点:也就是在原有类的功能不变的情况下,而且不必改动原有类的
基础上,
增强新的功能。
一般地,增强类的构造函数会以一个原有类的对象作为构造参数传入,其内部方法进行增强。
装饰设计模式与继承特性有点类似,但装饰设计模式比继承更灵活,可以避免继承体现的臃肿,降低类与类之之前的关系。
装饰类与被装饰类通常属于同一个体系中。
LineNumberReader类
此类是
BufferedReader类的子类,扩展了BufferedReader的
lineNumeber功能。
常用方法:
setLineNumberReader(int lineNumber) 设置初始行号
getLineNumberReader(int lineNumber) 获取行号
IO流 - 字节流 - 文件字节流
FileInputStream
InputStream操作的数据单位就是字节,以字节数组为缓冲带
常用方法:
int read()
int read(byte[] b)
int read(byte[] b, int off, int len)
int avaliable() 返回File对象流中未读取的字节数。
当read方法读到文件末尾时,返回
-1。所以常以此返回值作为读取的结束条件。
FileOutputStream
操作行为与InputStream相反,输出流,也叫写入流,其底层操作的也是字节,或以字节数组为缓冲带。
IO流 - 字节流 - 字节缓冲流
BufferedInputStream / BufferedOutputStream
缓冲区的实现类似于字符缓冲流,其内部会有一个byte[]数组,用作字节缓冲区
BufferedInputStream中的
read()方法返回值是int类型,但
其有效部分是二进制的最低8位
因为底层读取的是byte类型,其实
将byte转换成int时,二进制低8位以上的位数用0填补并返回
BufferedOutputStream中的
write()方法则是将int类型强制转换成byte类型,只取其中的有效部分,
即:
将int转换成二进制,只取最低8位,生成byte。
下面是自定义一个类似BufferedInputStream的内部read方法实现:
//定义一个字节数组,作为字节缓冲区
private byte[] buf = new byte[1024*4];
//字节缓冲区的字节累加器
private int count = 0;
//字节数组的下标值
private int pos = 0;
//read方法的实现:从文件流中读取字节,并缓冲到字节数组中
public int read() throws IOException
{
//如果字节缓冲区中字节数为0
if(count == 0)
{
//读取一部分字节到缓冲区中
count = in.read(buf);
pos = 0;
//如果读取流读到了文件末尾,则count为-1,即返回-1
if(count < 0) return -1;
//从字节缓冲区中读取单个字节并返回,同时累加器递减,指针下标递增
byte b = buf[pos];
count--;
pos++;
return b & 255;
}
//如果字节缓冲区中字节数大于0
if(count > 0)
{
//从字节缓冲区中读取单个字节并返回,同时累加器递减,指针下标递增
byte b = buf[pos];
count--;
pos++;
return b & 255;
}
return -1;
}
IO流 - 转换流 - InputStreamReader / OutputStreamWriter
InputStreamReader是字节流通向字符流的
桥梁。
构造方法:
InputStreamReader(InputStream in) 以字节输入流创建一个字符输入流对象
InputStreamReader(InputStream in, Charset cs) 使用指定的字符编码创建转换流
InputStreamReader(InputStream in, CharsetDecode cd) 使用指定的字符解码器创建转换流
InputStreamReader(InputStream in, String charsetName) 使用指定的字符编码名称创建转换流
OutputStreamWriter
System的out字段就是返回一个标准字节输出流OutputStream。
至此,读取键盘的录入时,就可以使用字节字符输入转换流。
System类的in字段返回的是个标准字节流输入流InputStream,默认读取键盘的输入。
并且,当字节流转换成字节流后,就可以使用字符缓冲流进行更高效的IO操作。
如:BufferedReader中的readLine(),BufferedWriter中的跨平台换行newLine()...
------- android培训、java培训、期待与您交流! ----------
详情请查看:

9351

被折叠的 条评论
为什么被折叠?



