JAVA 输入流 与 输出流 概念剖析

字节流


InputStrean  字节输入流从文件到程序

OutputStream  字节输出流 从程序到文件

字节输入流:是指数据以字节形式从其他文件或者终端设备想程序流入;

输入流只能从流中读取数据使用InputStrean类完成

字节输出流:数据以字节形式从程序流出,输出流只能向流中写入数据,使用OutputStream

1. InputStrean的主要方法 

                       类方法 描述
  Public void close()关闭输入流
Public abstract int read()以数字的方式读取内容
Public int read(byte [] b)将内容读取到byte数组中,同时返回读入的个数

2. OutputStream的主要方法

                       类方法 描述
 Public void close()关闭输出流
Public abstract int write(int b)在输出流中写入一个字节
Public void  write(byte[] b)在输出流中写入一个byte数组
Public void  write(byte[] b,int off,int len)在输出流中写入一个指定范围byte数组
Public void flush()刷新缓存区

3. 字节流的子类

FileInputStream是InputStrean的子类,主要用于从文件读取数据;

FileOuputStream是OutputStream的子类,主要用于向文件中写入数据。

                       构造方法 描述
Public FileOuputStream(File file,boolean flag)Boolean flag 参数是可选的,true表示追加模式打开文件,false表示以覆盖模式打开文件。默认flag参数值是flase
Public FielInputStream(File file) 

BufferedInputStrean是InputStrean的子类,用于从文件读取数据;

BufferedOutputStream是OutputStream的子类,用于向文件中写入数据。

BufferedInputStrean和BufferedOutputStream为InputStrean和OutputStream增加了内存缓冲区,根本目的是允许java的IO流一次操作多个字节,从而提高系统的性能。

                       构造方法 描述
BufferedInputStream(InputStrean in)(默认)按照32个字节缓冲区的缓冲流
BufferedInputStream(InputStrean in,int size)指定大小(size)的缓冲流
BufferedOutputStream(OutputStream in)(默认)按照32个字节缓冲区的缓冲流
BufferedOutputStream(OutputStream in,int size)指定大小(size)的缓冲流

BufferedOutputStream 中的flush方法可以强制输出缓冲区的数据

4. 对象序列化和反序列化

把Java对象转换成字节序列的过程成为对象序列化

把字节序列恢复到java对象的过程叫做对象的发序列化

序列化类的对象要求实现java.io.Serializable;

                       构造方法 描述
Public ObjectInputSrteam(inputStream in)构造输入对象

Public ObjectOutStreaminputStream in

构造输出对象
                       方法 描述
Final object readObject()读取对象

Final void writeObject(Object obj)

输出对象

对象序列化示例:

----对象转换成字节

File f=new File(“d:”+Fiel.separator+”stuInfo.txt”);

OutputStream outStream=new FileOutputStream(f);

ObjectOutputStream os=new ObjectOutputStream(outStream);

os.writeObject(new Student(“tom”,20));

outStream.close();

os.close();

对象反序列化示例:

----字节转换成对象

File file=new File(“d:”+Fiel.separator+”stuInfo.txt”);

InputStream inStream=new FileInputStream(f);

ObjectInputStream ois=new ObjectInputStream(inStream);

Object object=ois.readObject();

Student stu=(Student)object;

System.out.println("学生年龄;age="+std.age+",姓名="+std.name);

inStream.close();

执行后console输出:学生年龄;age=10,姓名=tom

其中 Student 为

class Student{
             String name=null;
             int age=0;
             public Student(String name,int age) {
                this.age = age;
                this.name = name;
            }
        }

字符流


Reader与Writer 抽象类

Reader的涉及方法

                       方法 描述
Public abstract void close()关闭字符输入流

Public int read()

读取单个字符
Public int read(char[] c)将内容读取到字符数组中,并返回读取的长度

Writer的涉及方法

                       方法 描述
Public abstract void close()关闭字符输出流
Public int writer(String str)将字符串到字符输出流中
Public int writer(char[] c)将字符数组到字符输出流中
Public abstarct void flush()强制清空缓存

FileReader和FileWriter是Reander和Writer的实现子类

主要用于读写文件

File f=new File(“d:demo/.doc”);

Writer out=new FileWriter(f);

Out.wirter(“Hello word”);

Out.close();

 

Reader reader=new FileReader(f);

Char c[]=new char[1024];

Int len=reandre.read(c);

 

InputStreamReader 和OutputStreamWriter 分别是Reander和Writer的子类

二者用于字节流和字符流之间的转换。

InputStreamReader用于将输入的字节流转变为字符流

该类读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。

InputStreamReaderInputStream in

InputStreamReaderInputStream in,String charsetName

OutputStreamWriter  用于将输入的字符流转变为字节流

OutputStreamWriter (OutputStream out)

OutputStreamWriter (OutputStream out,String charsetName)

示例:

File f=new File(“d:/demo.txt”);

OutputStreamWriter os=new OutputStreamWriter(new FileOutPutStream(f));

Os.write(“hello word”);

Os.close();

BufferedReader和BufferedWriter

BufferedReader和BufferedWriter是带缓冲区的Reader和Writer.

使用BufferedReader读取文本时,将首先从文件中读取字符数据并存入缓冲区中,然后调用read(),先冲缓冲区开始读取,缓冲区不足是再从文件中读取;

使用BufferedWriter时,写入数据将先存储到缓冲区中,在缓冲区饱满的情况下将一次性写入目的地。

通过缓冲区可以减少对硬盘的输入或输出操作,提高文件存取效率。
BufferedReader方法

                       方法类型 描述
BufferedReader(Reader in )构造方法接受Render类实例
Public String readLine()方法从缓冲区读取第一行文本
Public int  read()方法读取单个字符
Public int  read(char[] c,int off,int len)方法读取字符数组的一部分

BufferedWriter

                       方法类型 描述
BufferedWriter(Writer wr)构造方法接受Writer类实例
Public String newe()方法写入一个行分隔符
Public int  write(int c)方法写入单个字符
Public int  writer(char[] c,int off,int len)方法写入字符数组的一部分
Public int witer(String s,t off,int len)方法写入字符串的一部分

File f=new File(“d;/demo.txt);

FileWriter bufWriter=new BufferedWriter(writer);

bufWriter.writer(“hello word“);

bufwruter.close();

writer.close();

FileReader reader =new FileReader(f);

BufferedReader bufReader=new BufferedReader(reader);

Sysout.out.print(bufReader.readLine());
 

PrintWriterWriter的子类,其作用是将格式化的数据或对象输出到一个文本输出流

printWriter 类中主要的方法是print()writer(); 二者提供非常多的参数,可以实现多种形式的输出

字节流字符流
以字节为单位输出/输出以字符为单位输出/输出
操作时不用到缓冲区(内存)使用缓冲区
字节流按8位(单字节)为传输字符按16位(双字节)为传输

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值