字节流
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 ObjectOutStream(inputStream 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用于将输入的字节流转变为字符流
该类读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。
InputStreamReader(InputStream in)
InputStreamReader(InputStream 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());
PrintWriter是Writer的子类,其作用是将格式化的数据或对象输出到一个文本输出流
printWriter 类中主要的方法是print()和writer(); 二者提供非常多的参数,可以实现多种形式的输出
字节流 | 字符流 |
以字节为单位输出/输出 | 以字符为单位输出/输出 |
操作时不用到缓冲区(内存) | 使用缓冲区 |
字节流按8位(单字节)为传输 | 字符按16位(双字节)为传输 |