本人,精通 java、html、CSS、 JavaScript、 PHP、 C、 C++、 C#、 Ruby、 Perl、 python、 Objective-C、 ActionScript等单词的拼擅长Ai、Fw、Fl、Ae、Pr、Id、PS等软件的安装与卸载,熟悉windows、Linux、Mac、Android、IOS等系统的开关机

码上生活

IO流复习

读得懂的就是字符流,读不懂的就是字节流

字节流:

字节流写数据:

字节流问题:
字节流如何实现换行?

windows:\r\n

linux:\n

mac:\r

代码实现:

//创建字节输出流对象,并设置第二个参数为true,再次写入不会从头开始写,不会清除原本的内容
FileOutputStream fi11 = new FileOutputStream("D:\\dim\\dim.txt",true);

for (int i = 0; i < 5; i++) {
    fi11.write("hello".getBytes());
//字节流换行
    fi11.write("\r\n".getBytes());
}
//释放资源
fill.close;

 

字节流读数据:

一次读一个数据:

//创建字节输入对象
FileInputStream fii  = new FileInputStream("D:\\dim\\dim.txt");
//一次读一个数据
//fii.read:读数据
//by = fii.read():将读到的数据赋值给by
//by != -1:判断是否读取到最后一个数据
int by ;
while ((by = fii.read())!=-1){
    System.out.print((char) by);
}
//释放资源
fill.close;

一次读一个字节数组:

 //创建字节输入对象
 FileInputStream fii  = new FileInputStream("D:\\dim\\dim.txt");
 //一次读一个字节数组
byte[] bys   = new byte[1024];
int a;
while ((a  = fii.read(bys))!=-1){
    System.out.println(new String(bys,0, a));
}
/释放资源
fill.close;

字节缓冲数据流:

  • 字节缓冲数据流是为了提高读写数据的

  • 字节输入缓冲流:BufferedInputStream(InputStream in)

  • 字节输出缓冲流:BufferedInputStream(OutputStream out)

  • 字节缓冲流仅仅是提供缓冲区,而真正的读写数据还得依靠基本的额字节流对象操作。

字符流:

为啥会出现字符流呢?

由于字节流操作中不是特别方便,所以java就提供了字符流。

字符流  = 字节流  +  编码表

汉字在进行存储的时候,无论是那种编码,都一个字节都是负数。
代码演示:

String s  = "邓";
byte[] b = s.getBytes();
System.out.println(Arrays.toString(b));//[-23, -126, -109]
byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
System.out.println(Arrays.toString(bytes));//[-23, -126, -109]
//解码
String ss  = new String(bytes,"UTF-8");
System.out.println(ss);

InputStreamReader:是从字节流到字符流的桥梁

OutputStreamWriter:字符流到字节流的桥梁

代码实现:

  //读取字符数据,设置编码为GBK
    InputStreamReader re = new InputStreamReader(new FileInputStream("D:\\dim\\dim.txt"),"GBK");
    //写入字符数据,默认字符编码
    OutputStreamWriter rw = new OutputStreamWriter(new FileOutputStream("D:\\dim\\dim.txt"));
    rw.write("中国");
    //释放
    rw.close();
    //一次读取一个字节
    int a ;
    while ((a = re.read())!=-1){
        System.out.print((char) a);
    }
    //释放

    re.close();