Java中IO流,输入输出流概述与总结
发布时间:2020-12-31 11:22:15 所属栏目:交互 来源:网络整理
导读:总结的很粗糙,以后时间富裕了好好修改一下。 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中。其中, 所有输入流类都是抽象类InputStream(字节输入流),或者抽象类Reader(字符输入流)的子类; 而所有输出流都是抽象类O
FileInputStream和FileOutputStream进行拷贝文本或者图片或者歌曲: 1 package com.ningmeng; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 6 public class FileTest { 7 8 public static void main(String[] args) throws Exception{ 9 FileInputStream fis=new FileInputStream("aaa.txt"); 10 FileOutputStream fos=new FileOutputStream("bbb.txt"); 11 //如果没有bbb.txt,会创建出一个 12 13 int b; 14 while((b=fis.read())!=-1){ 15 fos.write(b); 16 } 17 fis.close(); 18 fos.close(); 19 } 20 }FileInputStream和FileOutputStream定义小数组进行读写操作: 1 package com.ningmeng; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 6 public class FileTest { 7 8 public static void main(String[] args) throws Exception{ 9 FileInputStream fis = new FileInputStream("aaa.txt"); 10 FileOutputStream fos = new FileOutputStream("bbb.txt"); 11 int len; 12 byte[] arr = new byte[1024 * 8];//自定义字节数组 13 14 while((len = fis.read(arr)) != -1) { 15 //fos.write(arr); 16 fos.write(arr,len);//写出字节数组写出有效个字节个数 17 } 18 //IO流(定义小数组) 19 //write(byte[] b) 20 //write(byte[] b,int off,int len)写出有效的字节个数 21 22 fis.close(); 23 fos.close(); 24 } 25 }?IO流(BufferedInputStream和BufferOutputStream拷贝) * A:缓冲思想 * 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多, * 这是加入了数组这样的缓冲区效果,java本身在设计的时候, * 也考虑到了这样的设计思想,所以提供了字节缓冲区流 * B.BufferedInputStream * BufferedInputStream内置了一个缓冲区(数组) * 从BufferedInputStream中读取一个字节时 * BufferedInputStream会一次性从文件中读取8192个,存在缓冲区中,返回给程序一个 * 程序再次读取时,就不用找文件了,直接从缓冲区中获取 * 直到缓冲区中所有的都被使用过,才重新从文件中读取8192个 * C.BufferedOutputStream * BufferedOutputStream也内置了一个缓冲区(数组) * 程序向流中写出字节时,不会直接写到文件,先写到缓冲区中 * 直到缓冲区写满,BufferedOutputStream才会把缓冲区中的数据一次性写到文件里<div class="cnblogs_code"> 1 package com.ningmeng; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.FileInputStream; 6 import java.io.FileOutputStream; 7 8 public class FileTest { 9 10 public static void main(String[] args) throws Exception{ 11 FileInputStream fis = new FileInputStream("aaa.txt"); 12 FileOutputStream fos = new FileOutputStream("bbb.txt"); 13 14 BufferedInputStream bis=new BufferedInputStream(fis); 15 //使用装饰模式,把fis装饰进去bis中。使用缓冲读取速度变快 16 BufferedOutputStream bos=new BufferedOutputStream(fos); 17 18 int b; 19 while((b=bis.read())!=-1){ 20 bos.write(b); 21 } 22 bis.close(); 23 bos.close(); 24 } 25 } ?面试题:小数组的读写和带Buffered的读取哪个更快? * 定义小数组如果是8192个字节大小和Buffered比较的话 * 定义小数组会略胜一筹,因为读和写操作的是同一个数组 * 而Buffered操作的是两个数组 IO流(flush和close方法的区别) flush()方法: 用来刷新缓冲区的,刷新后可以再次写出(字节缓冲流内置缓冲区,如果没有读取出来,可以使用flush()刷新来) close()方法:用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出 8:字符流FileReader和FileWriter 字符流是什么 * 字符流是可以直接读写字符的IO流 * 字符流读取字符,就要先读取到字节数据,然后转为字符. 如果要写出字符,需要把字符转为字节再写出. IO流(什么情况下使用字符流) * 字符流也可以拷贝文本文件,但不推荐使用. 因为读取时会把字节转为字符,写出时还要把字符转回字节. * 程序需要读取一段文本,或者需要写出一段文本的时候可以使用字符流 * 读取的时候是按照字符的大小读取的,不会出现半个中文 * 写出的时候可以直接将字符串写出,不用转换为字节数组 ? IO流(字符流是否可以拷贝非纯文本的文件) * 不可以拷贝非纯文本的文件 * 因为在读的时候会将字节转换为字符,在转换过程中,可能找不到对应的字符,就会用?代替,写出的时候会将字符转换成字节写出去 * 如果是?,直接写出,这样写出之后的文件就乱了,看不了了1 package com.ningmeng; 2 3 import java.io.FileReader; 4 import java.io.FileWriter; 5 6 public class FileTest { 7 8 public static void main(String[] args) throws Exception{ 9 //FileReader类的read()方法可以按照字符大小读取 10 FileReader fr=new FileReader("aaa.txt"); 11 int b; 12 while((b=fr.read())!=-1){ 13 System.out.println((char)b);//int类型转为字符型 14 } 15 fr.close(); 16 17 //FileWriter类的write()方法可以自动把字符转为字节写出 18 FileWriter fw = new FileWriter("aaa.txt",true); 19 fw.write("aaa"); 20 fw.close(); 21 22 //字符流的拷贝 23 FileReader fr2 = new FileReader("aaa.txt"); 24 FileWriter fw2 = new FileWriter("bbb.txt"); 25 26 int ch; 27 while((ch = fr2.read()) != -1) { 28 fw2.write(ch); 29 } 30 31 fr2.close(); 32 fw2.close(); 33 } 34 }1 package com.ningmeng; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 8 public class FileTest { 9 10 public static void main(String[] args) throws Exception{ 11 BufferedReader br=new BufferedReader(new FileReader("aaa.txt")); 12 BufferedWriter bw=new BufferedWriter(new FileWriter("bbb.txt")); 13 //BufferedReader和BufferedWriter的使用: 14 int b; 15 while((b=br.read())!=-1){ 16 bw.write((char)b); 17 } 18 br.close(); 19 bw.close(); 20 } 21 } ?先写到这里吧,内容比较多,以后有时间再总结,也方便自己脑补 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |