2021-07-29

IO/NIO 知识点记录

IO流目录
1、数据流的基本概念
(1)输入数据流
(2)输出数据流
2、基本字节数据流
(1)文件数据流
(2)过滤流
(3)管道数据流
(4)对象流
(5)可持久化
3、基本字符流
(1)读者和写者
(2)缓冲区读者和缓冲区写者
4、文件的处理
(1)File类
(2)随机访问文件

IO流

数据流

可粗略分为输入流(inputstream)输出流(outputstream)

1、输入数据流,只能读不能写(input stream)

java io包中所有的输入数据流都是从抽象类InputStream继承而来,并且实现了其中的所有方法。从数据流中读取数据时,必须有一个数据源与该数据流相连int read()方法 所读取的数据默认为字节类型,读取结束时会得到-1int read(byte[] b)方法 将多个字节读取到数组中,填满整个数组int read(byte[] b,int off,int len)方法 从输入流中读取长度为len的数据,从数组b中下标为off的位置开始放置读取的数据,读取完毕返回读取的字节数,读取结束是也会得到-1void close() 释放与该数据流相关的资源int available()返回目前可读取的最大字节数,但实际的读操作读取的字节数可能大于该返回值long skip() 跳过数据流中指定数量的字节不读,返回实际跳过的字节数boolean markSupported() 指示数据流是否支持回退操作void mark(int markarea) 标记数据流当前位置,并且划出缓冲区,大小至少为指定的参数void reset() 回到数据流被标记的位置

2、输出数据流,只能写不能读

继承抽象类OutputStream

void write(int i)将字节i写入数据流中,是抽象方法,需要加以实现才能使用void write(byte b[]) 将数组中的全部字节写入数据流void write(byte b[],int off,int len) 将数组中的第off个字节开始的len个字节写入数据流,通常以系统允许的最大数据块长度为单位进行操作void close() 关闭流和资源void flush() 数据以特定长度的单位进行传输,可能会存在最后一部分的数据不够一个单位,而被保留在缓冲区里,flush()可以将这部分数据强制提交基本字节数据流类

基本字节数据流类

文件数据流

文件数据流包括FileInputStream和FileOutputStream,这两个类用来进行文件的IO处理,其数据源或数据重点都应当是文件,不支持mark()和reset()方法

//文件myFile作为数据流的输入源FileInputStream fis = new FileInputStream("myFile")


//文件数据流示例,将"HELLO!"写入文件myFile.txt中try{ FileOutputStream out = new FileOutputStream("E:/files/myFile.txt"); out.write('H'); out.write('E'); out.write('L'); out.write('L'); out.write('O'); out.write('!'); out.close(); }catch (Exception e){  e.printStackTrace(); }

 //文件数据流示例,从myFile.txt中读取文件内容 try{  FileInputStream in = new FileInputStream("E:/files/myFile.txt");  while (in.available()>0){   System.out.println(in.read()+" ");  }  in.close(); }catch (Exception e){  e.printStackTrace(); }

对于FileOutputStream实例对象,如果指定的文件不存在,则系统创建一个新文件;如果文件存在,那么新写入的内容会覆盖原有数据。如果在读写文件或者生成新文件时发生错误,则会产生IOException;对于指定的文件不存在,则会产生FileNotFoundException,需要对这些异常进行声明或者捕获处理。

过滤流

过滤器数据流可以理解为对原始数据流进行处理过滤,这样从过滤流中读取的数据是对输入数据流的内容进行了特定处理之后的数据

1、缓冲区数据流

缓冲区数据流有BufferedInputStreamBufferedOutputStream,都属于过滤器数据流
缓冲区可以降低不同硬件设备之间的差异,提高IO操作的效率
这两个流提供了对mark()、reset()和skip()等方法的支持

//创建该类的实例对象时,有两种方法可以使用,一种取默认缓冲区大小:FileInputStream fis = new FileInputStream("myFile");InputStream is = new BufferedInputStream(fis);FileOutputStream fos = new FileOutputStream("myFile");OutputStream os = new BufferedOutputStream(fos);//另一种是自行设置缓冲区大小FileInputStream fis = new FileInputStream("myFile");InputStream is = new BufferedInputStream(fis,1024);FileOutputStream fos = new FileOutputStream("myFile");OutputStream os = new BufferedOutputStream(fos,1024);

!!注意,一般在关闭缓冲区输出流之前,应该使用flush()方法强制输出剩余数据,确保缓冲区所有数据都写入输出流

2、数据数据流

在前面提到的数据流中,处理的数据都是指字节或者字节数组,这是进行数据传输系统默认的数据类型
但实际很多时候所要处理的数据不止这两种类型,这时候就需要一种专门的数据流来处理
DataInputStreamDataOutputStream就是这样两个过滤器数据流,他们允许通过数据流读取Java基本数据类型boolean、float等

//创建方式FileInputStream is = new FileInputStream("myFile");DataInputStream dis = new DataInputStream(is);

这两个类提供了特定的方法操作不同的基本类型

//DataInputStream类提供了如下方法byte readByte()long readLong()double readDouble()boolean readBoolean()String readUTF()int readInt()float readFloat()short readShort()char readChar()//根据方法名字可以看出,上述方法分别对基本类型进行读取

//DataOutputStream类提供了如下方法void writeByte(byte aByte)void writeLong(long aLong)void writeDouble(double aDouble)void writeBoolean(boolean aBool)void writeUTF(String aString)void writeInt(int anInt)void writeFloat(float aFloat)void wrietShort(short aShort)void writeChar(char aChar)

可以看出,两个类的方法都是成对出现的,要注意的是,由于字符编码的原因,对字符串进行操作时,应该使用Reader和Writer两个类中的方法,而不是readUTF()和wirteUTF(),后续会讲到

3、管道数据流

管道数据流主要用于线程间的通信,一个线程中的PipedInputStream对象要从另一个线程中的PipedOutputStream对象中接收输入,
所以这两个类必须要一起使用,建立一个通信通道,也就是说管道数据流必须同时具备可用的输入端和输出端

//创建一个通信信道可以分为三个步骤//1、建立输入数据流PipedInputStram pis = new PipedInputStream();//2、建立输出数据流PipedOutputStream pos = new PipedOutputStrean();//3、将输入输出流连接起来pis.connect(pos);//或者pos.connect(pis);

//上面的创建形式用的是无参构造,也可以利用有参构造方法PipedInputStream pis = new PipedInputStream();PipedOutputStream pos = new PipedOutputStream(pis);

//进行数据通信public void testPiped() throws IOException { PipedInputStream pis = new PipedInputStream(); PipedOutputStream pos = new PipedOutputStream(pis); byte data = 0; System.out.println("开始传输-----"); try{  System.out.println("将数据-"+data+"-传输至pos");  //pos将数据写入管道  pos.write(data);  //pis从管道中读取数据  System.out.println("接收数据"+pis.read());; }finally {  pis.close();  pos.close(); }}

4、对象流

5、可持久化

基本字符流

字符流是在字节流的基础上,加上编码形成的数据流,因为字节流在操作中文时可能会出现乱码
字节流可以支持声音,视频,图片,文本等所有文件类型,而字符流只支持文本文件

读者和写者

Reader和Writer

字符输入流Reader

Reader常用子类 FileReader

//文件字符输入流常用方法read();read(char []);read(char [],offset,len);

//字符输入流示例try{ File file = new File("E:/files/myFile.txt"); FileReader fileReader = new FileReader(file); char[] ca = new char[1024]; int count = 0; while ((count = fileReader.read(ca)) != -1){  System.out.println(new String(ca,0,count)); } }catch (FileNotFoundException e){  System.out.println("文件未找到"); }catch (Exception e){  e.printStackTrace();}

字符输出流Wirter

Writer常用子类 FileWriter

//文件字符输出常用方法wirter();writer(char []);writer(char[],offset,len);writer(String);flush();//注意,close()方法中默认调用了flush()方法

//字符输出流示例FileReader fileReader = new FileReader(new File("E:/files/myFile.txt"));FileWriter writer = new FileWriter(new File("E:/files/myFile2.txt"));char[] ca = new char[1024];int count = 0;while ((count = fileReader.read(ca)) != -1){  System.out.println(new String(ca,0,count));  writer.write(ca,0,count);}System.out.println("完成---------");fileReader.close();writer.close();

缓冲区读者和缓冲区写者

BufferedReader/BufferedWriter 带缓冲区的字符输入流与字符输出流

缓冲区读者

BufferReader带缓冲区的字符输入流
常用方法:
readLine() 读取一行,如果为文件末尾,返回值为nul

//代码示例BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("E:/files/myFile.txt")));String value = "";while((value=bufferedReader.readLine())!=null){  System.out.println(value);}bufferedReader.close();

缓冲区写者

BufferedWriter
常用方法:
writer(string) //将字符串写入 到输出流
newLine() //根据系统的行分割符进行换行

//代码示例BufferedReader bufferedReader = new BufferedReader(new FileReader("E:/files/myFile.tx......

原文转载:http://www.shaoqun.com/a/892332.html

跨境电商:https://www.ikjzd.com/

达方物流:https://www.ikjzd.com/w/2562

mail.ru:https://www.ikjzd.com/w/2232

blackbird:https://www.ikjzd.com/w/950


IO流目录1、数据流的基本概念(1)输入数据流(2)输出数据流2、基本字节数据流(1)文件数据流(2)过滤流(3)管道数据流(4)对象流(5)可持久化3、基本字符流(1)读者和写者(2)缓冲区读者和缓冲区写者4、文件的处理(1)File类(2)随机访问文件IO流数据流可粗略分为输入流(inputstream)输出流(outputstream)1、输入数据流,只能读不能写(inputstream)j
四大"利器"让旅途更舒服 - :http://www.30bags.com/a/405964.html
四大博物馆之首-巴黎卢浮宫:http://www.30bags.com/a/228761.html
四大古城找艳遇 :http://www.30bags.com/a/413547.html
四大古城中最具争议的一座,网友质疑商业气息重,门票却要100元_徽州:http://www.30bags.com/a/220336.html
被邻居老头不停的要 老头使劲在我身上耸动:http://lady.shaoqun.com/a/247346.html
男友不让我公车穿内裤 地铁被陌生人做到高潮:http://lady.shaoqun.com/m/a/247950.html
被两个学长带到宿舍 学长和我在卫生间里做:http://lady.shaoqun.com/m/a/247424.html
欲望嫂子用修电脑引诱我:http://www.30bags.com/m/a/249581.html
深圳宝安科技馆8月展览汇总(持续更新):http://www.30bags.com/a/517601.html
2021时尚深圳展蝶讯馆展览好看吗:http://www.30bags.com/a/517602.html
2021时尚深圳蝶讯馆观展攻略:http://www.30bags.com/a/517603.html
深圳欢乐谷夏浪音乐节有朱星杰吗:http://www.30bags.com/a/517604.html

No comments:

Post a Comment