黑马程序员--Io流,(含自己的一点理解,与图解)
来源:互联网 发布:淘宝网电脑网页版登录 编辑:程序博客网 时间:2024/05/17 04:37
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
IO
在java中,文件的输入输出功能是通过流(Stream)来实现的。什么是流呢?可以理解为一组有顺序的,有起点和终点的动态数据集合。流可以看成是数据的导管,导管的一端是源端
一端是目的端,数据从源端输入,在目的端输出。
流按照处理数据的单位可分为两种:字节流和字符流。字节流处理字节的输入和输出,例如使用字节流读取或书写二进制数据。字符流为字符输入和输出处理提供了方便。他采用Unicode编码标准,因而可以国际化,在某些方面如汉字的处理,它比字节流高效。
流的抽象基类:
字节流:InputStream(输入)、OutputStream(输出);
字符流:Writer(写入)、Reader(读出)
所有字符输入流类都是抽象类Reader的子类。返回字符值。
int read()从源中读取一个字符的数据。返回字符值
int read(char b[])从源中试图读取b.length个字符到b中,返回实际读取的字符数目,返回-1表示读取完毕
void close()关闭输入流。
Java中IO流:
1,在程序中所有的数据都是以流的方法进行传输和保存的。
2,Java 的IO是实现输入和输出的基础。
3,Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入输出功能。
4,输入和输出是一个相对的概念,我们一般站在程序的角度来分析和处理问题的。
程序需要数据 --> 读进来--> 输入
程序保存数据 --> 写出去--> 输出
步骤:
1,使用File类找到一个文件对象,得到IO操作的源或目标
2,通过字节流或字符流的子类创建对象,(得到IO操作的通道)
3,进行读或写的操作,(IO操作)
4,关闭输入/输出,(注意节约资源,关掉)
注意:
1,定义文件路径时,可以用“/”或者“\\”。
2,在创建一个文件时,如果目录下有同名文件将被覆盖。
例如:用Reader来实现文件的读取。
//创建字符输入流对象,负责读取c:\hello.template文件
Reader fr=new FileReader("c:/hello.template");
//创建中转站数组,存放读取的内容
char[] ch=new char[1024];
//读取文件内容到ch数组
int length=fr.read(ch);
//输出保存在ch数组中的文件内容
System.out.println(new String(ch,0,length));
注意:最后要关闭输入流
if(fr!=null){
fr.close();
}
使用Writer输出内容到文件
void write(int n)向输出流写入单个字符。
void write(char b[])向输出流写入一个字符数组
void write(String str)向输出流写入一个字符串数组。
void close()关闭输出流
例如:
String str="传智播客,黑马程序员";
FileWriter fw=new FileWriter("c:\\itcast.txt");
fw.write(str);
注意:关闭写入流
if(fw!=null){
fw.close();
}
装饰设计模式:
解决的问题:给已有的对象提供增强额外的功能。对原有类进行了功能的改变,增强。
与继承的区别:它比继承更加灵活
Writer
|--TextWriter
|--MediaWriter
但是,发现写入效率有点低。想要对其进行效率的提高。 这时就可以使用缓冲技术来完成的。
对于已有对象中的写入方法,不够高效,可以通过派生子类的形式对其进行复写,定义高效的写入动作。如,
Writer
|--TextWriter
|--BufferTextWriter
|--MediaWriter
|--BufferMediaWriter
|--DataWriter
|--BufferDataWriter
这种方式其实是通过继承的方式提高了效率。但是对于扩展性是一个问题。而且所需的功能越多,子类就越多。
一旦加入新类,就需要为它提供高效。显得很麻烦!
这时我们可以将缓冲技术单独进行封装。哪个对象需要缓冲,就把哪个对象传递给缓冲对象即可。
读取键盘录入:
InputStream in = System.in;
将字节数据转成字符数据:InputStreamReader isr = new InputStreamReader(in);
提高读取效率,使用缓冲区:BufferedReader bufr = new BufferedReader(isr);
键盘录入:
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
注意:系统中获取的流对象都是唯一的,如果将其关闭,就不能在使用了。所以一般情况下,从System获取到的流对象,不需要关闭。它会随着程序的停止而结束。
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
- 黑马程序员--Io流,(含自己的一点理解,与图解)
- 黑马程序员-IO(字节流的理解)
- 黑马程序员-IO(字符流的理解)
- 黑马程序员——IO流的复制文件方法(含缓冲区方法)
- 黑马程序员---对委托的一点理解
- 黑马程序员——对io流的flush与close方法的理解
- 黑马程序员--IO流(装饰与继承的区别)
- 黑马程序员-关于Java IO流的一些理解
- 黑马程序员--对IO的理解
- 黑马程序员--对IO的理解
- 黑马程序员--IO总结(含2个设计模式)
- 黑马程序员-自己总结的java学习笔记(7)IO流
- 黑马程序员_java的IO流(对第十八课IO理解以及文件读取和字符写入总结)
- 黑马程序员_java输入与输出的IO流技术
- “黑马程序员”IO流DataInputStream与DataOutputStream的用法
- 黑马程序员-io流输入与输出的若干总结
- 黑马程序员 IO流 文件的分割与合并
- 黑马程序员-io流输入与输出的若干总结
- 【C++基础之五】函数调用机制与调用约定
- Linux-2.6.38的LCD驱动分析(四)
- Cisco IOS Zone-Based Firewall
- char,CHAR,TCHAR,LPSTR,LPCSTR,WCHAR ,CString
- Android SDK更新以及ADT更新出现问题的解决办法
- 黑马程序员--Io流,(含自己的一点理解,与图解)
- MySQL在线备份与恢复工具 --> Xtrabackup
- 在PROTEL99SE里面怎样才能将整张PCB(多拼板)一起旋转角度啊?望高手支招啊!
- ant fileset 用法
- 基于S3c6410触摸屏驱动分析(一)
- php微信4 自定义生成菜单
- JS对代码行进行折行
- This system is not registered with RHN
- 【Android基础入门〖9〗】SimpleAdapter之二