黑马程序员——IO流
来源:互联网 发布:科来网络 编辑:程序博客网 时间:2024/05/29 04:42
<a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>
数据在设备上的流动,以对象体现。
流操作规律:
(1) 明确操作对象
源:InputStream Reader
1) 内存 Array
2) 硬盘 File
3) 键盘 System.in
目的:OutputStream Writer
1) 内存
2) 硬盘
3) 控制台
(2) 操作数据是否为纯文本
按处理数据不同分:
字符流:处理纯文本数据的流对象,将字节流与编码表封装成的对象。
(1) Reader
1) 创建一个文件读取流对象,和指定名称文件关联
2) 调用read()。返回-1,标志读到结尾
3) 关闭流的底层资源
方法一:
FileReader fr=new FileReader("demo.txt");int mark=0;while(mark=fr.read()!=-1){ charch=(char)mark;}fr.close();方法二:自定义缓冲区
FileReader fr=new FileReader("demo.txt");char[] buf=new char[1024];int len=0;while (len=fr.read(buf)!=-1){ Strings=new String(buf,0,len);}fr.close();(2) Writer
1) 创建一个文件写入流对象,和文件要存放的目的地关联
2) 调用write(),将数据写入流中
3) 调用flush(),刷新对象缓冲区中的数据到目的地中
4) 关闭底层资源
FileWriterfw=new FileWriter("demo.txt",true);fw.write();fw.flush();fw.close();
字节流:处理字节数据的流对象
(1) InputStream
(2) OutputStream
例:复制图片
public static void copy() throwsIOException { FileInputStreamfis=new FileInputStream("F:\\1\\1.jpg"); FileOutputStreamfos=new FileOutputStream("F:\\1\\2.jpg"); byte[] buf=new byte[1024]; intlen=0; while((len=fis.read(buf))!=-1) { fos.write(buf,0,len); } fis.close(); fos.close(); }
缓冲区:提高流的操作效率
BufferedReader BufferedWriter
BufferedInputStream BufferedOutputStream
转换流
InputStreamReader 字节流转换成字符流输入
OutputStreamWriter 字符流转换成字节流输出
例:键盘输入,控制台输出
BufferedReader bufr = newBufferedReader(new InputStreamReader(System.in));BufferedWriter bufw = newBufferedWriter(new OutputStreamWriter(System.out));String line = null;while((line=bufr.readLine())!=null){ if("over".equals(line)) break; bufw.write(line.toUpperCase());//将输入的字符转成大写字符输出 bufw.newLine(); bufw.flush(); }bufw.close();bufr.close();
装饰设计模式
增强已有对象
定义类,通过构造函数将其传参,基于已有功能,加强功能
装饰类与被装饰类属于一个体系
优点:比继承灵活,避免体系臃肿。
例:
class MyBufferedInputStream{ private InputStream in; private byte[] buf = new byte[1024*4]; private int pos = 0,count = 0; MyBufferedInputStream(InputStreamin) { this.in= in; } //一次读一个字节,从缓冲区(字节数组)获取。 publicint myRead()throws IOException { //通过in对象读取硬盘上数据,并存储buf中。 if(count==0) { count= in.read(buf); if(count<0) return -1; pos= 0; byteb = buf[pos]; count--; pos++; return b&255; } elseif(count>0) { byteb = buf[pos]; count--; pos++; return b&0xff; } return -1; } publicvoid myClose()throws IOException { in.close(); }}
- 黑马程序员—io流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员 — IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO流
- 黑马程序员—IO
- 黑马程序员———IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- 黑马程序员——java IO流
- 黑马程序员——IO流
- 黑马程序员——IO流
- fdsafdsafdsafdsafdsa
- -eq和=的区别
- Chromium硬件加速渲染的GPU数据上传机制分析
- 对url中的参数进行URLEncode编码的实现
- hdoj2061(GPA
- 黑马程序员——IO流
- [quick-cocos2d-x lua学习] 各大IDE之体验及选择 ( LDT、Sublime Text 2、IntelliJ IDEA 12、XCode5 )
- 5165465
- 泛型Dao-减少重复的Dao代码,用Hibernate实现
- POJ 1083 Moving Tables
- 程序人生:无他,唯心向尔
- 好玩的位操作开关群
- 关于C语言break跳出双重循环的小技巧
- Qt 扁平化MainWindow以及自定义标题栏