java021字节流,字节过滤流(字节缓冲流)

一,字节输出流:
OutPutStream
按单位分:是字节流
按方向分:是输出流
按功能分:是节点流
字节输出流天生不带缓冲区,数据直接发送至目的地 ,因为它是按照一个一个的字节读取数据的,所以它读写的过程不会出现损失字节的问题,因而能操作图片,视频等
格式:

OutputStream out=new FileOutputStream("d:/1.txt");
  out.write('a');
  System.out.println("over");

用字节输出流写给记事本里面写汉字的时候,虽然写进去了,但是生成的是乱码,这是因为字节流不会进行编码和解码,是一个字节一个字节进行读写的,而一个汉字占多个字节(不同的码表中占的字节数不一样),所以在读写汉字的时候,把汉字分成一个个的字节读,从而生成乱码。
一个汉字在不同的码表中占几个字节?
在这里插入图片描述
可以看出一个汉字在gbk中占2个字节,在unicode中占4个字节,在utf-8中占3个字节,而字节码默认输入输出用的是gbk码表。
2,我们想把一个汉字输出,得先编码,用gbk码表编码,然后打开记事本的时候自动解码,两个字节解码成一个汉字,3个字节解码成一个汉字加一个乱码。

在这里插入图片描述
奇数个读:
在这里插入图片描述
在这里插入图片描述
二,字节输入流:
##字节流在读的时候不会进行解码和编码,而是直接一个字节一个字节的读取,不会丢失数据,所以字节流可以复制图片,音频,视频,和可执行文件
在这里插入图片描述
两个字节的读:
在这里插入图片描述
所以字节流可以来下载一些程序,图片,电影等等,下面示范下载LOL游戏,字节流不带缓冲区,所以没必要关流

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
public class Test {
 public static void main(String[] args) throws IOException {
  System.out.println("英雄联盟开始下载");
  URL u=new URL("英雄联盟下载链接");
  InputStream in=u.openStream();
  OutputStream out=new FileOutputStream("d:/LOL.exe");
  //下载在d盘的LOL包里面,后缀名要和下载链接的后缀名相同,表示同一文件
  int n;
  byte bb[]=new byte[1024*1024*2];
  //在这可以设置下载速度,注意下载速度不能太大,应小于宽带速度
  while((n=in.read(bb))!=-1){
   out.write(bb,0,n);
   }
  in.close();
  System.out.println("英雄联盟下载结束");
 
 }
}

三,字节过滤流:
字节过滤流:使用它的目的不为别的,就是为了它的缓冲区,而且自己可以定义缓冲区大小,提高运行速度
读的时候:
在这里插入图片描述
写的时候:
在这里插入图片描述
当没有关流的时候,设置缓冲区大小为1,我们可以看到a过去了,b没有过去,而是在缓冲区,所以字节缓冲区的优点是可以自己设置缓冲区大小,当我们没有设置的时候,它的缓冲区大小默认为8KB
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44699728/article/details/89555667