I/O流
流根据流的方向分为输入流和输出流
输入流:字节输入流、字符输入流
输出流:字节输出流、字符输出流
输入流是从数据源中读取数据,只进行读操作。输出流是将数据写入到指定文件中,只进行写操作。
根据流的数据类型分为字节流和字符流
字节流:字节输入流、字节输出流
字符流:字符输入流、字符输出流
纯文本数据优先使用字符流,除此之外使用字节流。
字节流
字节流结构图:
InputStream
为字节输入流的根类,有多个子类。
方法:int read():从输入流中读取下一个字节并返回,返回为0~255。读取到末尾返回-1。int read(byte[] b):读取多个字节,存到数组b中,并返回。输入流结束返回-1。int available():返回输入流中可读或可跳过的的字节数。void close():关闭输入流,并释放资源。
为字节输出流的根类,有多个子类。
方法:void write(int b):将指定整数b的低八位写入输出流。write(byte[] b):将指定数组b的b.length个字节写入输出流。void flush():刷新输出流,输出全部缓存内容。void close():关闭输出流,int到底占几个字节,并释放系统资源。,
方法:void write(int b):将指定整数b的低八位写入输出流。write(byte[] b):将指定数组b的b.length个字节写入输出流。void flush():刷新输出流,输出全部缓存内容。void close():关闭输出流,并释放系统资源。
这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节。整数(int类型的常量)有几种书写形式,程序中的整数一般采用十进制写法。用十进制方式写出的一个整数。
FileInputStream和FileOutputStream用来实现文件的读写。构造方法:FileInputStream(String name):传入字符串形式的地址。FileInputStream(File file):或者传入一个File对象。该构造方法抛出FileNotFountException异常。覆盖了父类的read()、available()、close()方法。
FileOutputStream
构造方法:FileOutputStream(String name):传入字符串形式的文件地址。如果不存在就创建一个文件;存在就将源文件内容覆盖。public FileOutputStream(String name,boolean append):参数为True时,不覆盖文件内容,在文件末尾写新内容。FileOutputStream(File file)。
BufferedInputStream
BufferedInputStream和BufferedOutputStream都是缓冲流。使用缓冲流可以减少读取的次数,提高读取效率。输入时,先将数据读取进缓冲区,再从缓冲区读取单个字节;输出时,先将数据一个一个写道缓冲区,再将整个数组写入是输出流中。构造放法:BufferedInputStream(InputStream in):传入一个输入流。缓冲区大小默认521字节。BufferedInputStream(InputStream in,int size):手动指定缓冲区大小。
BufferedOutputStream
可以是1、2、4、8字节。不同的语言用不同的表示方式 如: Byte是1字节,Word是2字节,Int是
构造方法:BufferedOutputStream(OutputStream out):默认大小521字节。BufferedOutputStream(OutputStream out,int size):指定大小。
DataInputStream
DataOutputStream
构造方法:DataOutputStream(OutputStream out)方法:(举例)void writeByte(int v):将v的低8位写入。void writeShort(int v):写入16位整数。void writeBytes(String s):将字符串每个字符的低8位按顺序写入输出流。
不过现在常用的编译器多认为int和long int相同,均为4字节,short为2字节,char为1字节。如果只输入int,它是可以包含以上三种形式。不同的语言不太一样,例如在Pascal中integer为2字节,byte为1字节,而longint为4字节。建。
ObjectInputStream
ObjectInputStream和ObjectOutputStream是实现对对象的输入输出,将对象的状态进行保存与恢复。**注意:要对对象进行读写操作,首先该类要实现Serializable接口进行序列化。ObjectInputStream实现了DataInput接口,所以可以读取基本数据类型。如readint()、readDouble。构造方法:ObjectInputStream(InputStream in)方法:(举例)int readInt();Object readObejct():使用readObject()方法读出对象,其类型与顺序要与写入时一致。并且读取时是Object类型,需要向下转型。
ObjectOutputStream
构造方法:ObjectOutputStream(OutputStream out)方法:(举例)void writeInt(int i)void writeObject(Object o)
字符流
字符流结构图:
Reader
Reader和Writer都是字符流的根类。方法:int read():读取一个字符,返回1~65535的int值。末尾返回-1。int read(char[] c):读取多个字符到数组c,达到末尾返回-1。void close()
Writer
void write(int c):写入一个字符,将int型的低16位写入。void write(char[] c):将字符数组c中的字符全部写入到输出流中。void flush():刷新。void close()
在一般的电脑中,int占用4字节,32比特,数据范围为-2147483648~2147483647[-2^31~2^31-1]在之前的微型机中,int占用2字节,16比特,数据范围为-32768~32767[-2^15~2^15-1]使用printf输出int占用字节数量:printf("%d。
InputStreamReader
OutputStreamWriter
构造方法:OutputStreamWriter(OutputStream out)OutputStreamWriter(OutputStream out,String cs)
BufferedReader
带有缓冲区的字符流。构造方法:BufferedReader(Reader reader)BufferedReader(Reader reader,int size)方法:String readLine():冲输入流中读取一行,如果文件末尾返回null
BufferedWrite
FileReader
继承InputStream,构造放法是调用父类(InputStreamReader)的构造放法。构造方法:FileReader(String filename)FileReader(File file)
也就是 :[-32768,32767];整型变量int的范围与计算机的字长有关,int 的长度是一个计算机字长。int类型允许存储的字节数是4个字节,换算出int UNSIGNED(无符号)类型的能存储的最小值为0,最大值为4294967295(即4B=
FileWriter
构造方法:FileWriter(String filename)FielWriter(File file):根据file对象创建一个字符输出流,若文件不存在创建一个。存在就对内容覆盖。FileWriter(String filename,boolean b):b为true的时候,不覆盖原文件内容,再文章末尾添加。