IO流,缓冲区,装饰设计模式
2015-07-12 22:38
363 查看
缓冲区原理:
临时存储数据的方法。减少对设备操作的频率,提高了效率。其实就是
对数据临时缓存到了内存(数组)中。
reade()方法原理:
public int myRead() throws IOException{
if(cout==0){
count = r.read(buffer);
index=0;
}
if(count<0){
return -1;}
char ch = buffer[index];
index++;
count--;
return ch;
}
readLine(): 调用了read ();从缓冲区中获取数据存储到readLine自己的缓冲区,
它会判断终止符,只存储行结束符前的数据。
if(ch=='\r')
continnue;
if(ch=='\n')
return sb.toString();
readLine()方法原理:
public String myReadLine() throws IOException{
StringBuilder sb = new StringBuilder();
int ch =0 ;
while((ch=myRead())!=-1){
if(ch=='\r')
continnue;
if(ch=='\n')
return sb.toString();
sb.append((char)ch);
}
if(sb.length()!=0)
return sb.toString();
return null;
}
****装饰设计模式(wrapper, Decorator): (BufferedReader,BufferedWriter)
可以给对象提供额外的功能,比继承方式更灵活。
装饰类与被装饰类都所属于同一个体系。
同时装饰类中持有装饰类的引用。
BufferedReader bufr= new BufferedReader (new InputStream(System.in));
****** Properties
特点:
1,Hashtable的子类,map集合中的方法都可以使用。
2,该集合没有泛型,键值都是字符串。
3,它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备上
键值的来源也可以是持久化的设备。
Properties prop =new Properties();
prop.list(System.out); // 列出给集合的所有对象,主要用于测试
***IO流的规律总结: 解决的问题,就是开发中具体要使用哪个流对象的问题。
1, 明确数据源,数据汇(数据目的)
其实就是在明确要使用的IO体系。InputStream OutoutStram Reader, Writer
需求中操作的是源: 意味着是读 。 InputStream Reader
需求中操作的是目的: 意味着写。 OutputStream . Writer
2,操作的数据是否是纯文本数据?
是,字符流
否,字节流
是并且是源,Reader
是并且是目的,Writer
通过前两个明确,明确了具体要使用的体系。
明确体系中要使用哪个对象:
源设备:
硬盘,能操作File 的流对象都是,File开头
键盘,System.in;
内存: 数组
网络: socker流
目的设备:
硬盘,能操作File 的流对象都是,File开头
键盘,System.out
内存: 数组
网络: socker流
到第三步明确就可以找到具体的流对象了。
4, 需要额外功能吗?
需要高效吗? 缓冲区,Buffered开头
需要编码转换吗? 转换流。
缓冲区原理:
临时存储数据的方法。减少对设备操作的频率,提高了效率。其实就是
对数据临时缓存到了内存(数组)中。
reade()方法原理:
public int myRead() throws IOException{
if(cout==0){
count = r.read(buffer);
index=0;
}
if(count<0){
return -1;}
char ch = buffer[index];
index++;
count--;
return ch;
}
readLine(): 调用了read ();从缓冲区中获取数据存储到readLine自己的缓冲区,
它会判断终止符,只存储行结束符前的数据。
if(ch=='\r')
continnue;
if(ch=='\n')
return sb.toString();
readLine()方法原理:
public String myReadLine() throws IOException{
StringBuilder sb = new StringBuilder();
int ch =0 ;
while((ch=myRead())!=-1){
if(ch=='\r')
continnue;
if(ch=='\n')
return sb.toString();
sb.append((char)ch);
}
if(sb.length()!=0)
return sb.toString();
return null;
}
****装饰设计模式(wrapper, Decorator): (BufferedReader,BufferedWriter)
可以给对象提供额外的功能,比继承方式更灵活。
装饰类与被装饰类都所属于同一个体系。
同时装饰类中持有装饰类的引用。
BufferedReader bufr= new BufferedReader (new InputStream(System.in));
****** Properties
特点:
1,Hashtable的子类,map集合中的方法都可以使用。
2,该集合没有泛型,键值都是字符串。
3,它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备上
键值的来源也可以是持久化的设备。
Properties prop =new Properties();
prop.list(System.out); // 列出给集合的所有对象,主要用于测试
***IO流的规律总结: 解决的问题,就是开发中具体要使用哪个流对象的问题。
1, 明确数据源,数据汇(数据目的)
其实就是在明确要使用的IO体系。InputStream OutoutStram Reader, Writer
需求中操作的是源: 意味着是读 。 InputStream Reader
需求中操作的是目的: 意味着写。 OutputStream . Writer
2,操作的数据是否是纯文本数据?
是,字符流
否,字节流
是并且是源,Reader
是并且是目的,Writer
通过前两个明确,明确了具体要使用的体系。
明确体系中要使用哪个对象:
源设备:
硬盘,能操作File 的流对象都是,File开头
键盘,System.in;
内存: 数组
网络: socker流
目的设备:
硬盘,能操作File 的流对象都是,File开头
键盘,System.out
内存: 数组
网络: socker流
到第三步明确就可以找到具体的流对象了。
4, 需要额外功能吗?
需要高效吗? 缓冲区,Buffered开头
需要编码转换吗? 转换流。
相关文章推荐
- How to use Hibernate - XML Configuration
- initWithCoder: 与initWithFrame:的区别
- 项目问题总结:Block内存泄露 以及NSTimer使用问题
- 汇编语言:浮点数传送指令
- C++builder 递归获取继承基类根类
- xtrabackup 链接不上MySQL的问题
- 2015.7.12js-11(DOM基础)
- 如何在Caffe中配置每一个层的结构
- 常用几种数据库,取前10条记录的sql语句写法
- 使用zookeeper实现分布式锁
- Android 实现 WheelView
- 坦克游戏分级等级c代码
- linux下常用的查找文件命令
- 编译安装PHP的插件
- 定义一个功能,记录程序运行的次数。满足五次后,给出提示,试用次数已到,请注册! (Properties)
- 安卓系统架构
- linux下安装sougou输入法
- Intel真没骗人 5200核显性能比肩独显
- 汇编语言:协处理器浮点指令:FILD
- web前端