黑马程序员-----IO流(2)字节流和转换流
2015-08-20 16:52
447 查看
——- android培训、java培训、期待与您交流! ———-
一、字节流
1、 字节流:
字节读取流:InputStream
字节写入流:OutputStream
字节读取流缓冲区:Buffered OutputStream
字节读取流缓冲区:Buffered InputStream
注:字节流和字符流用法差不多,只不过一个是对字节操作,一个是对字符进行操作
2、演示:往一个文件中,写入字节流并读取出来
3、 拷贝图片(用字节流来进行操作)
4、 通过缓冲区演示MP3的复制(用字节流来进行操作)
5、 读取键盘录入
1) System.in:对应的是标准输入设备:键盘
2) System.out:对应的是标准输出设备:控制台
3) 最常见的键盘录入的写法:
例子:通过键盘录入数据,当录入一行数据后,就将该行数据进行打印,如果录入的值是“over”,那么就停止录入。
二、转换流(字符和字节之间的桥梁)
1、读取转换流:InputStreamReader
2、写入转换流:OutputStreamWriter
3、示例演示:通过读取转换流来读取键盘录入的数据:
4、 通过写入转换流来获取键盘录入的数据并大写打印出来
(写入转换流:OutputStreamWriter)
5、 转换流什么时候使用?
转换流是字符和字节之间的桥梁,通常,涉及到字符编码需要转换时需要用到转换流
6、总结:(流操作的基本规律)
1) 明确源和目的
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
2) 操作的数据是否是文本
是:字符流
不是:字节流
3) 当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分
源设备:内存、硬盘、键盘等
目的设备:内存、硬盘、控制台等
——- android培训、java培训、期待与您交流! ———-
一、字节流
1、 字节流:
字节读取流:InputStream
字节写入流:OutputStream
字节读取流缓冲区:Buffered OutputStream
字节读取流缓冲区:Buffered InputStream
注:字节流和字符流用法差不多,只不过一个是对字节操作,一个是对字符进行操作
2、演示:往一个文件中,写入字节流并读取出来
package com.shan; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 需求:字节流File读写操作演示(FileInputStream和FileOutputStream) * @param args */ public class Demo13 { public static void main(String[] args) throws IOException { writeFile(); readFile_1(); readFile_2(); readFile_3(); } public static void writeFile() throws IOException //文件里写入字节数据 { FileOutputStream fos=new FileOutputStream("fos.txt"); fos.write("abcdefghijklmn".getBytes()); fos.flush(); fos.close(); } public static void readFile_1() throws IOException //一个字节一个字节的读取 { FileInputStream fis=new FileInputStream("fos.txt"); int ch=0; while((ch=fis.read())!=-1) { System.out.print((char)ch); } fis.close(); } public static void readFile_2() throws IOException //把字节存入字节数组中,按一个字节数组的长度读取 { FileInputStream fis=new FileInputStream("fos.txt"); byte[] buf=new byte[1024]; int len=0; while((len=fis.read(buf))!=-1) { System.out.println(new String(buf,0,len)); } fis.close(); } public static void readFile_3() throws IOException { FileInputStream fis=new FileInputStream("fos.txt"); byte[] buf=new byte[fis.available()]; //定义一个长度刚刚好的字节数组。不用循环了 fis.read(buf); System.out.println(new String(buf)); fis.close(); } }
3、 拷贝图片(用字节流来进行操作)
package com.shan; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 需求:拷贝一个图片文件 * @param args */ public class Demo14 { public static void main(String[] args) { FileOutputStream fos=null; FileInputStream fis=null; try { fis=new FileInputStream("1.jpg"); fos=new FileOutputStream("2.jpg"); int len=0; byte[] buf=new byte[1024]; while((len=fis.read(buf))!=-1) { fos.write(buf, 0, len); } } catch(IOException e) { throw new RuntimeException("复制图片失败!"); } finally { try { if(fis!=null) fis.close(); } catch(IOException e) { throw new RuntimeException("读取关闭失败!"); } try { if(fos!=null) fos.close(); } catch(IOException e) { throw new RuntimeException("写入关闭失败!"); } } } }
4、 通过缓冲区演示MP3的复制(用字节流来进行操作)
package com.shan; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 需求:演示MP3的复制,通过缓冲区 * @param args */ public class Demo15 { public static void main(String[] args) throws IOException { copyMp3(); } public static void copyMp3() throws IOException { BufferedInputStream bufis=new BufferedInputStream(new FileInputStream("1.mp3")); BufferedOutputStream bufos=new BufferedOutputStream(new FileOutputStream("2.mp3")); byte[] buf=new byte[1024]; int len=0; while((len=bufis.read(buf))!=-1) { bufos.write(buf, 0, len); } bufis.close(); bufos.close(); } }
5、 读取键盘录入
1) System.in:对应的是标准输入设备:键盘
2) System.out:对应的是标准输出设备:控制台
3) 最常见的键盘录入的写法:
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
例子:通过键盘录入数据,当录入一行数据后,就将该行数据进行打印,如果录入的值是“over”,那么就停止录入。
package com.shan; import java.io.IOException; import java.io.InputStream; /** * 需求:通过键盘录入数据,当录入一行数据后,就将该行数据进行打印,如果录入的值是“over”,那么就停止录入。 * @param args */ public class Demo16 { public static void main(String[] args) throws IOException { InputStream in=System.in; StringBuilder sb=new StringBuilder(); while(true) { int ch=in.read(); if(ch=='\r') continue; if(ch=='\n') { String s=sb.toString(); if("over".equals(in)) break; System.out.println(s.toUpperCase()); sb.delete(0, sb.length()); } else sb.append((char)ch); } } }
二、转换流(字符和字节之间的桥梁)
1、读取转换流:InputStreamReader
2、写入转换流:OutputStreamWriter
3、示例演示:通过读取转换流来读取键盘录入的数据:
package com.shan; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; /** * 需求:通过读取转换流来读取键盘录入的数据 (读取转换流:InputStreamReader) * @param args */ public class Demo17 { public static void main(String[] args) throws IOException { //获取键盘录入的数据 InputStream in=System.in; //将字节流对象转成字符流对象,使用转换流 InputStreamReader isr=new InputStreamReader(in); //为了提高效率,使用BufferedReader缓冲区提高效率 BufferedReader bufr=new BufferedReader(isr); String line=null; while((line=bufr.readLine())!=null) { if("over".equals(line)) break; System.out.println(line.toUpperCase()); } bufr.close(); } }
4、 通过写入转换流来获取键盘录入的数据并大写打印出来
(写入转换流:OutputStreamWriter)
package com.shan; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; /** * 需求:通过写入转换流来获取键盘录入的数据并大写打印出来 (写入转换流:OutputStreamWriter) * @param args */ public class Demo18 { public static void main(String[] args) throws IOException { BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufw=new BufferedWriter(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(); } bufr.close(); bufw.close(); } }
5、 转换流什么时候使用?
转换流是字符和字节之间的桥梁,通常,涉及到字符编码需要转换时需要用到转换流
6、总结:(流操作的基本规律)
1) 明确源和目的
源:输入流 InputStream Reader
目的:输出流 OutputStream Writer
2) 操作的数据是否是文本
是:字符流
不是:字节流
3) 当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分
源设备:内存、硬盘、键盘等
目的设备:内存、硬盘、控制台等
例如:将键盘录入的数据保存到一个文件中
(分析需求) 源: 因为是读取流,键盘录入的数据都是文本数据,所以使用Reader 因为System.in对应的是字节流,为了操作键盘的文本数据方便,所以将其转换成字符流,所以用到了读取转换流:InputStreamReader 因为需要提高效率,所以加入缓冲技术,用到了:BufferedReader 操作源的代码就可以确定,如下所示: InputStreamReader isr=new InputStreamReader(System.in); BufferedReader bufr=new BufferedReader(isr); 目的: OutputStream Writer 是否是纯文本?是!就选择Writer 设备:硬盘。一个文本文件, 使用FileWriter 需要提高效率,所以使用BufferedWriter 目的的代码就可以确定,如下所示: FileWriter fw=new FileWriter(c.txt); BufferedWriter bufw=new BufferedWriter(fw);
——- android培训、java培训、期待与您交流! ———-
相关文章推荐
- 黑马程序员-----IO流(1)字符流
- 100+个程序员开发必备参考手册(在线及下载) [复制链接]
- 黑马程序员-----集合类
- 黑马程序员-几段重要的小程序
- 黑马程序员——Java基础---基础语法(四)
- 黑马程序员-----String类
- 我爸爸是个程序员
- 黑马程序员——面向对象
- 进职场记(一)--下山
- 黑马程序员-----多进程
- 数据库基础(面试常见题)
- Java常见面试题
- 笔试面试题分享
- 看到一个程序员成长之路 一点点感慨
- 黑马程序员——OC视频学习过程6
- 卡特兰数 Catalan数 ( ACM 数论 组合 )
- 程序员的分级理解
- 面试问题
- java面试题笔记2015-08-20
- 黑马程序员-JAVA基础测试题(6-10)