java基础—8.IO输入输出流

来源:互联网 发布:全球域名注册局 编辑:程序博客网 时间:2024/05/16 13:52

一、理解及概述

IO流:即InputOutput的缩写。Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。|--特点:(1) IO流用来处理设备间的数据传输。(2) Java对数据的操作是通过流的方式。(3) Java用于操作流的对象都在IO包中。(4) 流按操作数据分为两种:字节流和字符流。(5) 流按流向分为:输入流和输出流。注意:流只能操作数据,而不能操作文件。|--基类: (1)字节流的抽象基流:InputStream和OutputStream (2)字符流的抽象基流:Reader和Writer
|--Java流的分类
|--按流向分:输入流: 程序可以从中读取数据的流。输出流: 程序能向其中写入数据的流。|--按数据传输单位分:字节流: 以字节为单位传输数据的流字符流: 以字符为单位传输数据的流

二、IO类体系结构图

|--字节流
|--字符流

三、缓冲技术

java的缓冲是为了提高流的读取效率,缓冲技术的原理是将流对象封装了到内存数组,将数据存入,再一次性取出。缓冲区要结合流使用,是对流功能的增强。字符流和字节流都有缓冲:|--字符流缓冲|--写入流缓冲区BufferedWriter|--读取流缓冲区BufferedReader|--字节流缓冲|--写入流缓冲区BufferedInputStream|--读取流缓冲区BufferedOutputStream

|--操作步骤(1)创建一个基础流;(2)将需要被提高效率的流对象作为参数传递给缓冲区的构造函数; (3)使用缓冲技术的方法;

四、流的常用方法

流中主要是读和写操作,常用方法如下,其中缓冲区的写操作注意要刷新流:
|--Write、OutputStream  write()  一个字节写write(char[] cbuf, int off, int len)  数组缓冲|--BufferedWrite BufferedOutputStream  装饰类、缓冲技术newLine();    换行,与平台无关,包装方法flush();    一定要刷新流|--Reader、InputStreamread()  一个字节读取read(char[] cbuf, int off, int len)   数组缓冲|--BufferedReader 、BufferedInputStream装饰类、缓冲技术readLine() 读取一行flush()    刷新流

五、流的操作规律

|--标准输入输出流
System.in:对应的标准输入设备,键盘。对应的类型是:InputStream。
System.out:对应的是标准的输出设备,控制台。对应的类型是:PrintStream,PrintStream是OutputStream和FilterOutputStream的子类。
|--流的一般操作规律
(1)明确源和目的。
源:输入流。InputStream  Reader目的:输出流。OutputStream  Writer(2)操作的数据是否是纯文本。        是:字符流        否:字节流(3)当体系明确后,再明确要使用哪个具体的对象。通过设备来进行区分:        源设备:内存,硬盘,键盘        目的设备:内存,硬盘,控制台(4)转换流什么使用?字符和字节之间的桥梁。通常,涉及到字符编码转换时,需要用到转换流。
package ioTest;import java.io.*;/** *键盘的输入和 输出 *思路: *1.明确源和目的 *源    :InputStream *目的: OutputStream *2.操作的数据是不是纯文本 *源    :是  Reader *目的 : 是  Reader *3.体系明确,对象选用: *源    : 键盘   System.in InputStream *目的: 控制台System.out PrintStream * *所以: *源: * *InputStreamReader isr = new InputStreaReadr(System.in); *BufferedReader br = new BufferedReader(isr);//缓冲技术 *目的: *OutputStreamWriter osw = new OutputStreamWrinter(System.out); *BufferedWriter bw = new BufferedWriter(osw);//缓冲技术 */public class Demo1 {public static void main(String[] args) throws IOException {//建立输入流,并转成字符流InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);//缓冲技术//建立输出流,并转成字符流OutputStreamWriter osw = new OutputStreamWriter(System.out);BufferedWriter bw = new BufferedWriter(osw);//缓冲技术//建立字符串,用于记录输入的数据String line= null;while((line=br.readLine())!=null){if(line.equals("over"))break;//把字符转成大写,再打印出去bw.write(line.toUpperCase());//换行bw.newLine();//刷流bw.flush();}//关流、关资源br.close();bw.close();}}

六、装饰类设计模式

当想对已有对象进行功能增强时,可定义类:将已有对象传入,基于已有对象的功能,并提供加强功能,那么自定义的该类称之为装饰类。|--装饰类的运用模式 装饰类通常都会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。|--装饰和继承的区别:(1)装饰模式比继承要灵活。避免了继承体系的臃肿,且降低了类与类之间的关系。 (2)装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能,所以装饰类和被装饰的类通常都是属于一个体系。 (3)从继承结构转为组合结构。在定义类的时候,不要以继承为主;可通过装饰设计模式进行增强类功能。灵活性较强,当装饰类中的功能不适合,可再使用被装饰类的功能。
/* 这个是模板BufferedReader的装饰类, 1.建立一个成员对象Reader 2.建立myReaderLine()方法 */class MyBufferedReader{//传入一个Reader对象private Reader r;//构造函数的Reader传给成员变量rMyBufferedReader(Reader r){this.r = r ;}//每次读一行的方法 public String myReaderLine() throws IOException{//定义一个临时容器StringBuilder sb = new StringBuilder();int ch = 0;while((ch=r.read())!=-1){//遇到换行符跳过if(ch=='\r')continue;if(ch=='\n')continue;elsesb.append((char)ch);}//如果最后有数据则返回if(sb.length()!=0)return sb.toString();return null;}}

七、PrintWrite和PrintStream

|--PrintWriter 字节打印流
构造函数可以接收的参数类型(1)file对象。File(2)字符串路径。String(3)字节输出流。OutputStream(4)字符输出流。 Writer
|--PrintStream  字符打印流
(1)file对象。File(2)字符串路径。String(3)字节输出流。OutputStream
|--特色点
|--构造方法
1、自动刷新   PrintWriter/PrintStream(OutputStream out, boolean autoFlush)
对应方法 println()、printf() 、 format()2、指定字节码  PrintWriter(String fileName, String csn) |--方法1、父类Writer/OutputStream的方法全有2、println()/print()

八、InputStreamWriter/OutputStreamReader

|--转换流的由来:
a、字符流与字节流之间的桥梁
b、方便了字符流与字节流之间的操作
|--转换流的应用:
字节流中的数据都是字符时,转成字符流操作更高效。
|--InputStreamReader将字节流通向字符流
a、获取键盘录入对象。InputStream in=System.in;b、将字节流对象转成字符流对象,使用转换流。
          InputStreamReaderisr=new InputStreamReader(in);c、为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReaderBufferedReader   br = new BufferedReader(isr);
//键盘录入最常见写法   
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|--OutputStreamWriter字符流通向字节流
字符通向字节:录入的是字符,存到硬盘上的是字节。步骤和InputStreamReader转换流一样。
0 0
原创粉丝点击