java零基础知识回顾(io简单总结)

java零基础知识回顾(io简单总结)


IO是重点中的重点,只要与数据有关的操作都要牵涉到流。里面需要注意的东西太多,我这里简单总结了一些,希望对大家有所帮助吧


按操作数据分:字节流与字符流                           按流向分为:输出流、输入流


 


|- --字节流(原始数据),需要用户读入后进行相应的编码转换。 由InputStream和OutputStream处理 


|- --字符流基于自动转换而实现,读取数据时会把数据按照JVM的默认编码自动转换成字符。 由Reader和Writer处理。


 基于双字节的Unicode代码单元 


 


InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。  


OutputSteam:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。  


Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。  


Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。 


 


 


四个抽象基类


  字节流               |- -- InputStream  、OutputStream


  字符流               |- -- Reader  、  Writer


 
 


字符流 


CharArrayWriter:把内存中的字符数组写入输出流,输出流的缓冲区会自动增加大小。输出流的数据可以通过一些方法重新获取。


StringWriter: 一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。


FileWriter:把数据写入文件。


BufferedWriter:提供缓冲功能。


OutputStreamWriter:字符流通向字节流的桥梁:可使用指定的 charset将要写入流中的字符编码成字节。


PrintWriter: 向文本输出流打印对象的格式化表示形式。


 


CharArrayReader: 从内存中的字符数组中读入数据,以对数据进行流式读取。


StringReader:从内存中的字符串读入数据,以对数据进行流式读取。


FileReader:从文件中读入数据。注意这里读入数据时会根据JVM的默认编码对数据进行内转换,而不能指定使用的编码。所以当文件使用的编码不是JVM默认编码时,不要使用这种方式。要正确地转码,使用InputStreamReader。


BufferedReader:提供缓冲功能,可以读取行:readLine();


LineNumberReader: 提供读取行的控制:getLineNumber()等方法。


InputStreamReader: 字节流通向字符流的桥梁:它使用指定的 charset读取字节并将其解码为字符。


 


字节流


FileOutputStream和ByteArrayOutputStream,前者实现了把数据流写入文件的功能,后者实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray()和 toString() 获取数据。


BufferedOutputStream: 提供了缓冲功能的输出流,在写出完成之前要调用flush来保证数据的输出。


DataOutputStream: 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。


PipedOutputStream: 允许以管道的方式来处理流。可以将管道输出流连接到管道输入流来创建通信管道。管道输出流是管道的发送端。通常,数据由某个线程写入 PipedOutputStream 对象,并由其他线程从连接的 PipedInputStream 读取。


PrintStream: 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。我们经常用到的System.out或者System.err都是PrintStream。


 


FileInputStream和ByteArrayInputStream,他们分别实现了从文件或者内存中的字节数组读入数据到输入流。 BufferedInputStream: 提供了缓冲功能。


DataInputStream: 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。


PipedInputStream: 允许以管道的方式来处理流。当连接到一个PipedOutputStream后,它会读取后者输出到管道的数据。


PushbackInputStream: 允许放回已经读取的数据。


SequenceInputStream: 能对多个inputstream进行顺序处理。


 


 


 


缓冲区


好处: 提高了对数据的读写效率


缓冲区的出现是为了提高流的操作效率而出现的。


所以在创建缓冲区之前,必须要先有流对象。


 


 


装饰设计模式:


当想要对已有的对象进行功能增强时,


可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。


那么自定义的该类称为装饰类。


装饰类通常会通过构造方法接收被装饰的对象。


并基于被装饰的对象的功能,提供更强的功能。


 


字符读取流(18.12)


//将C盘一个文本文件复制到D盘。






复制的原理:


其实就是将C盘下的文件数据存储到D盘的一个文件中。


步骤:


1,在D盘创建一个文件。用于存储C盘文件中的数据。


2,定义读取流和C盘文件关联。


3,通过不断的读写完成数据存储。


4,关闭资源。






 


 


字节读取流(19.12/13)






复制一个图片


思路:


1,用字节读取流对象和图片关联。


2,用字节写入流对象创建一个图片文件。用于存储获取到的图片数据。


3,通过循环读写,完成数据的存储。


4,关闭资源。










演示mp3的复制。通过缓冲区。


BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("c:\\0.mp3"));


BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("c:\\1.mp3"));






 






读取键盘录入。键盘录入的read方法是字节流InputStream的方法


System.out:对应的是标准输出设备,控制台。


System.in:对应的标准输入设备:键盘。






 


 


l 将字节流对象转成字符流对象,使用转换流。InputStreamReader


键盘录入,读取键盘!一次读取一行字节:


BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));


 


l 字符流通向字节流的桥梁  OutputStreamWriter


键盘输出:


BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));


 


流:只能操作数据


 


 


 






File类常见方法:


1,创建。


boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。


和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。


boolean mkdir():创建文件夹。


boolean mkdirs():创建多级文件夹。


2,删除。


boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。


void deleteOnExit();在程序退出时删除指定文件。


3,判断。


boolean exists() :文件是否存在.


isFile():


isDirectory();


isHidden();


isAbsolute();


4,获取信息。


getName():


getPath():


getParent():


getAbsolutePath() 


long lastModified() 


long length() 


 






删除一个带内容的目录。


删除原理:


在window中,删除目录从里面往外删除的。


既然是从里往外删除。就需要用到递归。






 






用于记录应用程序运行次数。~~键值对




如果使用次数已到,那么给出注册提示。




很容易想到的是:计数器。




可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。


可是随着该应用程序的退出,该计数器也在内存中消失了。


下一次在启动该程序,又重新开始从0计数。这样不是我们想要的。


程序即使结束,该计数器的值也存在。


下次程序启动在会先加载该计数器的值并加1后在重新存储起来。


所以要建立一个配置文件。用于记录该软件的使用次数。


该配置文件使用键值对的形式。


这样便于阅读数据,并操作数据。


键值对数据是map集合。


数据是以文件形式存储,使用io技术。


那么map+io -->properties.


配置文件可以实现应用程序数据的共享。






打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印。


字节打印流:


PrintStream


构造函数可以接收的参数类型:


1,file对象。File


2,字符串路径。String


3,字节输出流。OutputStream


字符打印流:


PrintWriter


构造函数可以接收的参数类型:


1,file对象。File


2,字符串路径。String


3,字节输出流。OutputStream


4,字符输出流,Writer。






 


 


 


用于操作字节数组的流对象。


ByteArrayInputStream :在构造的时候,需要接收数据源,。而且数据源是一个字节数组。


ByteArrayOutputStream: 在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。


这就是数据目的地。


 


在流操作规律讲解时:


源设备,


键盘 System.in,硬盘 FileStream,内存 ArrayStream。


目的设备:


控制台 System.out,硬盘FileStream,内存 ArrayStream。
 






编码:字符串变成字节数组。


String>String: new String(byte[],charsetName);





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值