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
- java基础—8.IO输入输出流
- java基础--io输入输出流
- Java基础之IO输入输出流
- 【Java基础 五】---输入输出io流
- Java IO输入输出流
- java io 输入输出流
- Java IO(输入输出流)
- Java输入输出流IO
- JAVA-IO输入输出流
- Java-IO-输入输出流
- java io 输入输出流
- java基础5:io流对象之字节输入输出流
- java基础6:io流对象之字符输入输出流
- Java基础-IO-字节输入输出流(笔记)
- Java基础-IO-字符输入输出流(笔记)
- 黑马程序员——Java基础---IO(输入输出)(上)
- 黑马程序员——Java基础---IO(输入输出)(下)
- Java——IO(输入输出流)
- think-php学习(基础概念)
- NSCoding协议
- Centos7 安装kilo-2 controller(ntp mariadb rabbitmq)
- 零java基础搞定微信Server_5:启用微信公众号开发模式
- Android使用SpannableString进行字符串的分段处理
- java基础—8.IO输入输出流
- Leet Code Medium 1 two sum
- 使用 IndexedDB
- HighCharts 详细使用及API文档说明
- 再谈程序员要注重沟通能力的提升——如何培养起写作的习惯
- 题目:单词搜索
- iOS开发系列课程(06) --- 常用控件介绍
- Java学习笔记,基础总结(二)
- Leetcode 228 Summary Ranges