黑马程序员-----IO流(2)字节流和转换流
来源:互联网 发布:狗语翻译器软件 编辑:程序博客网 时间:2024/05/29 08:12
——- 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流(2)字节流和转换流
- 黑马程序员---IO--字节流
- 黑马程序员-IO字节流的基础应用。。整个IO的分析(字符流和字节流的选择,转换)
- loading黑马程序员之IO字节流(2-2)
- 黑马程序员——IO流(三)字节流、字符流、转换流
- 黑马程序员----IO流(字符流、字节流、转换流)
- 黑马程序员——IO(一)字符流,字节流,缓冲流,转换流
- 黑马程序员_温习 IO流二 (个人笔记)(字节流 -----转换流)
- 黑马程序员——IO(缓冲区、字节流、转换流、流操作规律)
- 黑马程序员:IO流之字节流
- 黑马程序员 IO流-->字节流
- 黑马程序员--IO流02--字节流
- 黑马程序员--IO流--字节流
- 黑马程序员-day19-IO流(字节流)
- 黑马程序员:IO流之字节流
- 黑马程序员--IO流之字节流
- 黑马程序员:IO流之字节流
- 黑马程序员---IO流-字节流
- iOS开发-使用Storyboard进行界面跳转及传值
- 装数据库的准备工作
- 【codevs1048】【codevs1154&&06TG】石子归并、能量项链,序列dp的典型题目
- 【已解决】可以ping通无法通过浏览器浏览该网站
- Office 365 IT Professional——利用PowerShell管理Administrator Role
- 黑马程序员-----IO流(2)字节流和转换流
- [263] Ugly number
- python __name__ == '__main__'解析
- Java基本数据类型
- CodeForces 550B Preparing Olympiad
- VI相关应用
- 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法【转】
- hdu 1431 素数回文(打表)
- Linux时钟精度