字节流:
InputStrean 字节输入流 从文件到程序
OutputStream 字节输出流 从程序到文件
字节输入流是指数据以字节形式从其他文件或者终端设备想程序流入;
输入流只能从流中读取数据使用InputStrean类完成
字节输出流:数据以字节形式从程序流出,输出流只能向流中写入数据,使用OutputStream
InputStrean的主要方法
方法 | 描述 |
Public void close() | 关闭输入流 |
Public abstract int read() | 以数字的方式读取内容 |
Public int read(byte [] b) | 将内容读取到byte数组中,同时返回读入的个数 |
|
|
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() | 刷新缓冲区 |
FileInputStream是InputStrean的子类,主要用于从文件读取数据;
FileOuputStream是OutputStream的子类,主要用于向文件中写入数据。
Public FileOuputStream(File f,boolean flag)
Boolean flag 参数是可选的,true表示追加模式打开文件,false表示以覆盖模式打开文件。默认flag参数值是flase
Public FielInputStream(File file);
BufferedInputStrean和BufferedOutputStream为InputStrean和OutputStream增加了内存缓冲区,根本目的是允许java的IO流一次操作多个字节,从而提高系统的性能。
BufferedInputStream(InputStrean in) //按照32个字节缓冲区的缓冲流
BufferedInputStream(InputStrean in,int size)//指定大小的缓冲流
BufferedOutputStream(OutputStream in) //按照32个字节缓冲区的缓冲流
BufferedOutputStream(OutputStream in,int size)//指定大小的缓冲流
BufferedOutputStream 中的flush方法可以强制输出缓冲区的数据
对象序列化和反序列化;
把Java对象转换成字节序列的过程成为对象序列化
把字节序列恢复到java对象的过程叫做对象的发序列化
序列化类的对象要求实现java.io.Serializable;
Public ObjectInputSrteam(inputStream in) | 构造方法 | 构造输入对象 |
Final object readObject() | 方法 | 从指定位置读取对象 |
Public ObjectOutStream (inputStream in) | 构造方法 | 构造输出对象 |
Final void writeObject() | 方法 | 输出对象的指定位置 |
//对象序列化:对象转换成字节
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 f=new File(“d:”+Fiel.separator+”stuInfo.txt”);
InputStream inStream=new FileInputStream(f);
ObjectInputStream os=new ObjectInputStream(in);
Object object=in。readObject();
Student stu=(Student)object;
System.out.print(“姓名”+stu.getName());
System.out.print(“姓名”+stu.getAgee());
inStream.close();
in.close();
字符流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用于将输入的字节流转变为字符流
OutputStreamWriter 用于将输入的字符流转变为字节流
InputStreamReader(InputStream in)
InputStreamReader(InputStream in,String charsetName)
OutputStreamWriter ((OutputStream out))
OutputStreamWriter (OutputStream out,String charsetName)
File f=new File(“d;/demo.txt”);
OutputStreamWriter os=new OutputStreamWriter(new FileOPutInStream(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(Reader in ) | 构造方法 | 接受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());
PrintWriter是Writer的子类,其作用是将格式化的数据或对象输出到一个文本输出流
printWriter 类中主要的方法是print()和writer(); 二者提供非常多的参数,可以实现多种形式的输出
字节流 | 字符流 |
以字节为单位输出/输出 | 以字符输出 |
操作时不用到缓冲区(内存) | 使用缓冲区 |
字节流按8为传输 | 字符按16为传输 |
字节流是由字节组成的,字符流是由字符组成的