IO流(2)

Java中的面向对象

    • 字节缓冲区流的概述和使用字节缓冲流:
    • 转换流和编码表
    • String类中的编码解码
    • 转换流中的编码和解码
    • 字符流写数据的五种方法
      • 判断和获取功能
    • IO流概述和分类
      • 字节流写数据
    • 字符流读取数据

字节缓冲区流的概述和使用字节缓冲流:

BufferedOutputStream:字节缓冲输出流

BufferedInputStream:字节缓冲输入流

BufferedOutputStream(OutputStream out)

该构造方法提供了一个默认的缓冲区代销,一般使用默认的缓冲区就可以了。

字节换缓冲区流仅仅提供缓冲区,而真正的底层的读写数据还是需要基本的流对象进行操作

实现代码:


BufferedOnputStream bos = new  BufferedOnputStream(new FileOutputStream("a.txt"));

bos.write("hello.getBytes());

bos.close();           //写入


BufferedInputStream bos = new  BufferedInputStream(new FileOutputStream("a.txt"));
int by ;

while((by=bis.read())!=-1){
     

System.out.print((char)by);   //读取

}

转换流和编码表

转换流=字节流+编码表

常用码表:
ASCII

GB2312

GBK

UTF8

乱码:针对同一个数据编码和解码的编码表不一

String类中的编码解码

例如:String s = “你好”;

编码:

byte[ ] bys = s.getBytes("UTF-8");  //指定编码UTF8

System.out.println(Arrays.toString(bys));

解码:
String ss = new String(bys,“UTF-8);

System.out.println(ss);

转换流中的编码和解码

OutputStreamWriter字符输出流

public OutputStreamWriter(OutputStreamout).根据默认编码把字节流转换成字符流

public OutputStreamWriter(OutputStreamout,String charsetName).根据指定编码转换成字节流

例如:

     OutputStreamWriter osw = new OutputStreamWriternew FileOutputStream("a.txt") , "GBK")
     osw.write("您好"):
     osw.close();

InputStreamWriter字符输入流

public InputStreamWriter(InputStreamout).根据默认编码把用默认编码读数据

public InputStreamWriter(InputStreamout,String charsetName).用指定编码读数据

     InputStreamWriter isw = new InputStreamWriternew FileInputStream("a.txt") , "GBK"int ch ;
    while( (ch = isw.read() )= -1{
     System.out.print(char)ch);
     isw.close();

字符流写数据的五种方法

public void write(int c):

写一个字符

osw.write('a');

一字符=两字节,需要刷新

oswflush();或osw.close();



public void write (char[ ] cbuf)

char [ ] chs = {
     'a','b','c','d'};

public void write(chs):

写一个字符数组

osw.write(chs);

public void write (char[ ] cbuf, int off, int len)

osw.write(chs,0,3);写一个字符数组的一部分

public void write (String str)

public void write(“hello”):

写一个字符串

public void write (String str,int off, int len)

osw.write(“hello”,0,3);写一个字符数组的一部分

判断和获取功能

isDirectory(判读是否为目录

isFile():判断是否为文件

exists( ):判断是否存在


getAbsoulte(): 获取绝对路径

getPath():获取相对路径

getName():获取文件名

IO流概述和分类

流向:

          输入流
          输出流

数据类型:

       字符流
       字节流

字节流写数据

字节流写数据的步骤:

A.创建字节流输出对象(FileOutputStream(String name)方法)

B.调用写数据的方法(write()方法)

C.释放资源(close()方法)

三种方式:

public void write(int b):一次写一个字节

public void write(byte[ ]  b):一次写一个字节数组



public void write(byte[ ]    b,int offf, int len) :一次写一个数组的一部分



创建字节流输出对象:
      

   FileOutputStream of = new   FileOutputStream("b.txt"));

String类中有一个方法getBytes( )将字符串变成数组:

fos.write(65);

fos.write("ABCDE".getByetes());

fos.write("ABCDE".getByetes(),0,3);



fos.close();

释放资源

字符流读取数据


读取:



创建对象:


InputStreamReader isr = new InputStreamReader(new FileputStream("a.txt"));



int ch;



一次读取一个字符

while((ch=isr.read()=-1){

     System.out.print((char))ch);

}

   isr.close();



char[ ] chs =new char [1024];

int len;

while((len=isr.read (chs))!=-1){
     

    System.out.print(new String(chs,0,len));

}

   isr.close();

你可能感兴趣的:(IO流(2))