FileInputStream/FileOutputStream流

在Java中,所有的文件都是字节形式的,其提供了从文件读写字节的方法,而且允许在字符形式的对象中使用字节文件流,最常用的两个流类是FileInputStream/FileOutputStream,它们生成与文件链接的字节流。

计算机如何存储中文的?
  当前平台默认编码集 :GBK 一个中文两个字节
  第一个字节:一定是负数
  第二个字节:一般是负数,可能也会是正数,不会影响的结果.
                 例句:
String str = "你好" ;//定义一个字符串
byte[] bys = str.getBytes() ; //转成字节数组
System.out.println(Arrays.toString(bys));//打印[-60, -29, -70, -61]

(1)一次读取一个字节数组的方式要比一次读取一个字节方式高效.

例句://复制操作:将e盘下的abc.mp4复制到当前项目下,输出copy.mp4

FileInputStream fis = new FileInputStream("e://abc.mp4") ;//封装源文件

FileOutputStream fos = new FileOutputStream("copy.mp4") ;//封装目的地文件

byte[] bys = new byte[1024] ;//读写操作:一次读取字节数组
int len = 0 ;
while((len=fis.read(bys))!=-1) {
//边读边写
fos.write(bys, 0, len);
}

//释放资源
fis.close(); 
fos.close();
}

(2)一次读取一个字节数组,相当于构造一个缓冲区,字节缓冲流比一次读取一个字节数组还要高效

        字节缓冲输入流BufferedInputStream
   public BufferedInputStream(InputStream in):默认缓冲区大小构造缓冲输入流对象
   public BufferedInputStream(InputStream in,int size):指定缓冲区大小构造缓冲输入流对象 
   public int read()
   public int read(byte[] b,int off,int len) 

 在使输入流的时候, 两种方式读取(一次读取一个字节/一次读取一个字节数在),只能用一种方式,否则,会出现错误!

例句://构造一个字节缓冲输入流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bos.txt"));

/* int by = 0 ;//读数据
while((by=bis.read())!=-1) { //一次读取一个字节
System.out.print((char)by);}*/


byte[] bys = new byte[1024] ;//一次读取一个字节数组
int len = 0 ;
while((len=bis.read(bys))!=-1) {
System.out.println(new String(bys, 0, len));
}
bis.close(); //释放资源
字节缓冲输出流:BufferedOutputStream
 构造方式:
(第一种开发中) public BufferedOutputStream(OutputStream out):采用的默认的缓冲区大小(足够大了) ,来构造一个字节缓冲输出流对象
                  public BufferedOutputStream(OutputStream out,int size):指定size缓冲区大小构造缓冲输出流对象
  IllegalArgumentException - 如果 size <= 0
  
  写数据的方式:一次写一个字节write(int by)

   一次写一个字节数组的一部分write(byte[] b, int off, int len) 

 方法:void flush() ;刷新缓冲区的流

  问题:字节缓冲输出流它的构造方法为什么不能直接传递路径/文件?
   缓冲输入流/缓冲输出流,它只是在底层内部提供一个缓冲区的数组,
           底层实现文件的复制/读取/写入这些操作都依赖于基本流对象来操作                                     (InputStream/OutputStream/FileInputStream/FileOutputstream)
  

猜你喜欢

转载自blog.csdn.net/qq_41141896/article/details/80411731