java输入输出流

来源:互联网 发布:淘宝挂机赚钱软件 编辑:程序博客网 时间:2024/05/14 07:31

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流(只有输出)

 PrintWriter、PrintStream 分别针对字符和字节,重载了print,不会自动抛出异常,自动flush
PrintWriter(Writer out),PrintWriter(Writer out,Boolean autoFlush),PrintWriter(OutputStream out),PrintStream(OutputStream out)
File test=new File("F:\\role.txt");  
PrintStream ps=new PrintStream(new FileOutputStream(test));   //建立输出流
System.setOut(ps);    //重新设置输出对象,输出内容打印到文件

五、Object流(直接将对象写入或读出)序列化:将一个对象转化成字节流直接写到硬盘上或网络上

ObjectInputStream、ObjectOutputStream
transient关键字:透明的,序列化的时候不写,serializable关键字:可序列化的接口(标记性接口,空接口,没有方法,告诉编译器实现了该接口的类可以被序列化),externalizable关键字:(自己控制序列化过程)外部化 readExternal(ObjectInput  in:从ObjectInput 里读  writeExternal(ObjectOutput out) 写到ObjectOutput


0 0
原创粉丝点击