字节流:图片、视频
抽象基类:InputStream, OutputStream
----------------------
字符流:文本数据
可以指定哪种编码表。
抽象基类:Reader,Writer
----------------------
编码表
ASCII
GB2312->扩容->GBK->扩展GB18030
国际标准码表:Unicode表->优化->UTF-8,2个字节表示,16个二进制位。
----------------------
一、学习一下字符流的特点
数据最常见的形式是文件
FileWriter
创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的对象。会抛出异常。
FileWriter fw = new FileWriter(“test.txt”);
fw.write(“abce”);
-----------------------
写入方式一:
fw.flush();
fw.write(“bce”);
fw.flush();
-----------------------
写入方式二:
fw.close();//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。将数据刷到目的地中。
---------------------------
和flush()的区别:
1.flush刷新后,流可以继续使用
2.close刷新后,会将流关闭
IO异常的处理方式
FileWriter fw = null;
try{
fw = new FileWriter(“demo.text”);
}catch(IOException e){
sysout();
}finally{
try{
if(fw!=null)
fw.close();
}catch(){
sysout();
}
}
----------------------------------
//true参数,代表,不覆盖已有的文件,并在已有文件的末尾处,进行数据的续写
FileWriter fw = new FileWriter(“demo.txt”,true);
fw.write(“hh”);
--------------------------------------
FileReader fr = new FileReader(“demo.txt”);
int ch1 = fr.read();
----------------------------
int ch = 0;
while((ch=fr.read())!= -1)
sysout();
----------------------
while(true)
{
int ch = fr.read();
if(ch ==01)
break;
sysout((char)ch);
}
如果到结尾,就返回-1
--------------------------
缓冲区可以提高流的操作效率,在创建缓冲区之前,必须先有流对象。
//创建一个字符写入流对象
FileWriter fw = new FileWriter(“buf.txt”);
//为了提高字符写入流的效率,加入缓冲技术
//只需要将需要被提高效率的流对象,传递给缓冲区的构造函数即可。
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write(“abcde”);
//只要用到缓冲区,记得刷新。
bufw.flush();
bufw.close();//关闭缓冲区,就是关闭缓冲区中的流对象,所以这句可以省略不写。
---------------------------
newLine(); 跨平台换行符。代替了\r\n。
------------------------------
读取缓冲区
BufferedReader类
从字符输入流中读取文本,缓冲各个字符。
---
//创建一个读取流对象和文件相关联。
FileReader fr = new FileReader(“buf.txt”);
//为了提高效率,加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
BufferredReader bufr = new BufferedReader(fr);
String s1 = bufr.readLine();
System.out.prinltn(“s1:” + s1);
bufr.close();