java程序中,数据的输入、输出操作以“流”stream的方式进行,java提供了各种类,用以获取不同种类的数据。
分类:1、按方向分为:输入、输出流(站在程序的角度)
2、按处理数据单位分为字节流、字符流。(字节:01代码 1个字节以stream结尾的 字符:两个字节 reader、writer)
3、功能不同分为节点流、处理流(节点:直接操作原始文件, 处理:在节点流的基础上,再包一层外套)
四个抽象类:inputStream、outputStream reader、Writer
一、InputStream
InputStream基本方法:
1、int read() 读取一个字节,以整数形式返回(0-255),返回-1,表示读取完成
2、int read(byte[ ] buffer)读取一系列字节,存到buffer中,返回读取的字节数,-1,表示读取完成
3、int read(byte[ ] buffer,int offset,int length)读length个字节到buffer,从buffer的offset开始,返回-1,表示读取完成
4、void close()关闭流,释放内存资源
二、OutputStream
方法
1、void writer(int b) 向输出流中写一个字节数据,b的低8位
2、void writer(byte[ ] b)向输出流中写一个字节数组
3、void writer(byte[ ] b,int off ,int len)向输出流中写一个字节数组,从off开始的len个字节
4、void flush() 将输出流中缓冲的数据全部写到目的地(在close之前调用)
5、void close()关闭流,释放内存资源
三、Reader
方法与InputStream相似,字节变成字符
四、Writer
方法与OutputStream相似,以字符为单位
自己独有的方法:
void writer(String string)输出一个字符串到输出流,String类有一个char[ ] toCharArray()方法,将字符串转变成字符数组,在写出去
void writer(String string,int offSet ,int len)输出字符串从offset开始的len个字符
五、节点流
六、处理流
一、缓冲流
BufferedReader、BufferedWriter 、BufferedInputStream、BufferedOutputStream 套接在相应节点流上,BufferedReader提供readLine()读一行。对于输出的缓冲流,数据先存在内存,使用flush 立刻写出。
二、转换流(字节->字符)
InputStreamReader,OutputStreamWriter,
InputStreamReader isr=new InputStreamReader(System.in); System.in是InputStream类型,从键盘上读
InputStreamReader isr=new InputStreamReader(new FileInputStream("B:\\b.txt"));
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("B:\\b.txt"));
三、数据流
DataInputStream,DataOutputStream是处理流,需套接在节点流上,可以存取int,double等数据把一个long类型的数写入数组,占8个字节(把一个long类型数转换成String 类型String.valueOf(Math.random()),String内部把他变成字节数组,占很大内存),构造方法:DataInputStream(InputStream,in);
有writeInt(),writeDouble(Math.random()),writeIong(),writeChars(String s),writeChar(int v),writeUTF(String s)以UTF-8编码格式写出,等方法
read(byte[ ] b)返回int ,readBoolean( ) 返回Boolean,readByte() 返回int,readChar() 返回char ,readInt()返回int,readDouble()返回double,readUTF()返回String.......
ByteArrayInputStream、ByteArrayOutputStream是字节流,在内存中分配一块字节数组,
ByteArrayOutputStream:
此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray()
和 toString()
获取数据。关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。byte[ ] toByteArray()创建一个新的子节数组,并且当前字节数组的内容已经被复制过去
ByteArrayInputStream:
ByteArrayInputStream
包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read
方法要提供的下一个字节。关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
四、print流(只有输出)
System.setOut(ps); //重新设置输出对象,输出内容打印到文件