IO流(2)

来源:互联网 发布:数据降维方法 编辑:程序博客网 时间:2024/05/16 02:13


字节流:FileInputStream 读取字节流
第一种读取方式:
FileInputStream fis = new FileInputStream(file);
 int by =0;
 while((by=fis.read())!=-1){
  System.out.println(by);
 }

第二种读取方式: read(byte[]);
byte[] buf = new byte[2];
int lent=0;
while((len = fis.read(buf)!=-1){
 System.out.println(new String(buf,0,len));
}
缓冲区大小:
byte[] buf = new byte(fis.available());//创建了一个和文件大小一样的缓冲区
fis.read(buf);
String s= new String (buf);


字节流的缓冲区对象:

 FileInputStream fis = new FileInputStream("teamp\\.1.jpg");
 BufferedInputStream bufis = new BufferedInputStream(fis);//对流进行 缓冲
 FileOutputStream fos = new FileOutputStream("teamfile\\copy.txt");
  BufferedOutputStream bufos = new BufferedOutputStream(fos);//对流进行 缓冲

 bufos.flush(); //缓冲流的刷新

***操作中文数据****
读取中文,按照字节的形式,但是一个中文GBK码表中是两个字节
 而且字节流的read方法一次读取一个字节,如何获取到一个中文?
  别读一个就操作,多读一些存起来,再操作,存到字节数组中,将字节数组转成字符串

 String s = new String (bus,0,len);//将字节数组转成字符串,而且是按照默认的编码表(GBK)进行解码


***编码表****
Unnicode:  
     标识头信息
0.......  1个字节
110......  10 ...   2 个字节
1110......  10....  10 ..    三个字节

中文编码表: 两个字节开头都是 1 
GBK: 第一个是1开头, 第二个是0开头


*** InputStreamReader ***********
 InputStreamReader是字节流通向字符流的桥梁,它使用指定的 charset 读取字节并解码为字符

 InputStreamReader isr = new InputStreamReader(fis);
 int ch = isr.read();
System.out.println((char)ch);


***** OutputStreamWriter  *****
 OutputStreamWriter  是字符流通向字节流的桥梁,它使用指定的 charset 读取字符并编码为字节

 OutputStreamWriter osw = new OutputStreamWiter(fos);
  osw.writr("你好");
 //关闭资源。 flush()刷新完,流可以继续使用,close刷新完,直接关闭,流结束了,不能再写

 字符流=字节流+编码表

*** 转换流的子类,
  专门用于操作文本文件的流对象。
FileWriter fw = new FileWriter("tempfile\\fw.txt");
 fw.write("你好");

read:
 FileReader  fr = new FileReader("tempfile\\fw.txt");
  int ch =0;
 while((ch=fr.read())!=-1){
   System.out.println((char)ch);
 }

对字符进行操作要选选择字符流。
 

BufferedWriter:
 FileWriter fw = new FileWriter("tempfile\\bufw.txt");
 BufferedWriter bufw = new BufferedWriter(fw);
   bufw.write("abc");


*** 读取键盘录入:
  BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  bufr.readLine();   // 一次读一行

 Scanner=流+正则表达式,方法都是按照某种规则在读取数据。

0 0
原创粉丝点击