Java IO流之字节流

流过昼夜 提交于 2019-11-30 03:34:40

一、 IO 流的概念简述

I:Input:输入(读取),把硬盘中的数据读取到内存中使用
O:Output:(输出、写入),把内存中的数据,写入到硬盘中保存
流:(字符、字节),1字符=2字节,1字节=8个二进制位
字节流:字节输入流:InputStream ,字节输出流:OutputStream
字符流:字符输入流:Reader,字符输出流:Writer

二、字节输出流写入数据到文件

Java.io.FileOutputStream extends OutputStream
  FileOutputStream:文件字节输出流
    作用:把内存中的数据读到硬盘的文件中
  构造方法: FileOutputStream(String name):创建一个向具有指定名称的文件中写入数据的文件输出流
       FileOutputStream(File file):创建一个向指定File对象表示的文件中写入数据的文件输出流
       参数:写入数据的目的地
       String File :目的地是一个文件的路径
       File file:目的地是一个文件
  构造方法的作用:
       创建一个FileOutputStream对象
       会根据对象中传递的参数,创建一个空的文件夹
       会把创建好的FileOutputStream对象指向创建好的文件
  写入数据的原理:(内存—>硬盘)
  Java程序–>JVM(java虚拟机)–>OS(操作系统)–>os调用写数据的方法–>把数据写到文件中
  字节输出流的使用步骤:
       1、创建一个FileOutputStream对象,构造方法中传入写入数据的目的地
       2、调用FileOutputStream对象中的方法write,把数据写到文件中
       3、释放资源,流的使用会占用一定的内存,使用完毕要把内存清空,保证程序的效率
       在这里插入图片描述note:如果想要一次写入多个字节的话,就要定义一个字节数组,byte[ ] bytes={ ……};将bytes作为write 的参数传入即可。
    常用方法:
     void write(byte[] b) 将 b.length 个字节写入此输出流。
     void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。
     void write(int b) 将指定 byte 写入此输出流。
     如果写入的是字符的话,则使用getBytes()方法将字符串转换为字节数组:
     byte[ ] bytes=“你好”.getBytes( );
数据的追加写和换行写:使用两个参数的构造方法:
FileOutputStream(String name,boolean append):创建一个向具有指定名称的文件中写入数据的文件输出流
FileOutputStream(File file,boolean append):创建一个向指定File对象表示的文件中写入数据的文件输出流
 boolean append:追加写开关
    true:创建对象不会覆盖原文件,继续在文件的末尾追加写数据
    false:创建一个新文件,覆盖原文件

三、字节输入流

java.io.InputStream:字节输入流   此对象表示字节输入流所有类的超类

  • 定义了所有子类共性的方法:
              int read( )从输入流中读取数据的下一个字节
              int read(byte[ ] b )从输入流中读取一定数量的字节,并将其储存在缓冲区数组b中
              void close( )关闭输入流并释放与该流相关的所有系统资源
  • java.io.FileInputStream extends InputStream
    FileInputStream:文件字节输入流   作用:把硬盘中的数据读取到内存中使用
      构造方法: FileInputStream(String name)
           FileInputStream(File file )
           参数:读取文件中的数据源
           String name:文件的路径
           File file :文件
      构造方法的作用: 1、会创建一个FileInputStream对象
              2、会把FileInputStream对象指向构造方法中要读取的文件
  • FileInputStream读取数据的原理(硬盘—>内存)
        java程序—>JVM—>OS—>OS读取内存的方法—>读取文件
        字节输入流的使用步骤(重点):
        1、创建FileInputStream对象,构造方法中绑定要读取的数据源
        2、使用FileInputStream对象中的read方法,读取文件
        3、释放资源
    在这里插入图片描述一次输入多个字节的方法:
        int read(byte[ ] b) 从输入流中读取一定数量的字节,并将其储存在缓冲区数组b中
  • 明确两件事情
        1、方法参数byte[ ]的作用?
        起到缓冲作用,存储每次读取到的字节
        把数组的长度定义为1024(1KB)或1024的整数倍
        2、方法返回值int是什么?
        每次读取到的有效字节数
       String类的构造方法:
          String(byte[ ] bytes):把字节数组转化为字符串
          String (byte[ ] bytes ,int offset,int length ):把字节数组的一部分转化为字符串,offset为      开始索引,length为转换的字节个数
		//创建FileInputStream对象,绑定要读取的额数据源
		FileInputStream inputStream =new FileInputStream(new File("./src/FileInputStream"));
		/*
		 * 发现读取是一个重复的过程,可以使用循环优化,不知道有多少个字节,所以使用while循环
		 * while循环结束的条件,读到-1结束
		 */
		byte[] bs =new byte[1024];//存取读取到的多个字节
		int num =0;//记录每次读取到的有效字节的个数
		while((num=inputStream.read(bs))!=-1) {
			System.out.println(new String(bs,0,num)  );
		}
		inputStream.close();
  • note:字节流读取 中文字符容易发生乱码的问题
        一个中文:GBK:2个字节    UTF-8:3个字节
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!