• 关于Java IO InputStream 的一点整理!


    程序的开发其中一直在用文件的读写。可是对于java其中输入流以及输出流仅仅是会用不理解,一直以来想搞清楚其,可是一直没有运行(悲剧)。今天早上抽出半个小时通过JDK API1.6.0中文版帮助逐步的了解下字节输入流读取字节的方法。
    以下就说说InputStream其中read()read(byte[]  b)read(byte[] bint off int len)的使用以及差别

    一、read()方法:
    public static void inputStreamRead1() {
          try{
                //构造一个输入流对象(读数据)test.txt文本的内容为:我爱你中国
                InputStream is = new FileInputStream(“E:\test.txt”);
                //构造一个输出流对象(写数据)
                OutputStream os = new FileOutputStream(“E:\ctest.txt”);
                int len;//表示读入的数据(十进制的形式表示)
                //FileInputStream能够使用read()方法一次读取一个字节,读入的数据以int类型返回,所以,你要是使用System.out.println()将数据显示出来的时候是以10进制的方式显示
                while((len = is.read())!=-1){
                     System.out.println(“len=”+len);
                     os.write(len);
               }
               os.close();
               is.close();
         }catch(Exception e){
                e.printStackTrace();
         }
    }
    执行以上程序,则控制台的输出为:
    如图
    图片1.png
    说明:我爱你中国为5个汉字,5个汉字则为10个字节,而read()方法为一个字节一个字节的读,所以读取10次。而后len的值则为汉字的10进制表示
    2、read(byte[] b)方法:
    public static void inputStreamRead2(){
         try{
               //构造输入流对象(读数据)test.txt文本的内容为多个我爱你中国
               InputStream is = new FileInputStream(“E:\test.txt”);
               //构造输出流对象(写数据)
               OutputStream os = new FileOutputStream(“E:\ctest.txt”);
               //创建一个长度为1024byte数组
               byte[] b = new byte[1024];
               //int len;表示成功读取的字节数的个数
               //FileInputStream能够使用read(byte[] b )每次读取多个(b.length)字节数据(每次最多读取多少个)到byte数组其中
               while((len = is.read(b))!=-1){
                   System.out.println(“len=”+len);
                   os.write(b);
               }
               os.close();
               is.close();
          }catch(Exception e){
               e.printStackTrace();
          }
    }
    执行上面的程序则控制台的输出为:
    如图
    图片2.png
    说明:每次最多读取1024个字节。非常明显使用这样的方式的效率要高于read()读取的效率,开发的过程其中也见识使用此方式进行读取。
    3、read(byte[] b,int off,intlen):
    1public static void inputStreamRead3(){
              try{
                    //构建输入流对象(读文件)
                    InputStream is = new FileInputStream(“E:\test.txt”);
                    //构建输出流对象(写文件)
                    OutputStream os = new FileOutputStream(“E:\ctest.txt”);
                   //声明一个大小为输入流大小的数组
                    byte[] b = new byte[is.available()];
                    int len = 0;//表示成功读取的字节数的个数
                    while(len<is.available()){
                         //read(byte[] b,int off, int len)表示从输入流其中最多将len个字节的数据读取到一个byte数组其中
                         len+=is.read(b, len, is.available() - len);
                         os.write(b);
                    }
                    os.close();
                    is.close();
               }catch{
                       e.printStackTrace();
               }
    }
    执行上面的程序控制台的输出为:
    如图
    图片3.png
    说明:则一次性读取完毕
    2public static void inputStreamRead3(){
              try{
                    //构建输入流对象(读文件)
                    InputStream is = new FileInputStream(“E:\test.txt”);
                   //构建输出流对象(写文件)
                    OutputStream os = new FileOutputStream(“E:\ctest.txt”);
                   //声明一个大小为输入流大小的数组
                    byte[] b = new byte[1024];
                    int len = 0;//表示成功读取的字节数的个数
                    while((len=is.read(b,len,1024))!=-1){
                          System.out.println(“len=”+len);
                          os.write(b);
                    }
                    os.close();
                    is.close();
               }catch{
                   e.printStackTrace();
               }
    }
    说明:执行上面的程序控制台的输出为:
    如图
    图片4.png
    则一次最多读取1024个字节


  • 相关阅读:
    PHP 反射API
    wamp下mysql错误提示乱码的解法
    PDO、PDOStatement、PDOException
    PHP 常用函数
    TCP/IP
    centOS7+mariadb+Nginx+PHP7.0 安装
    php中引用&的真正理解-变量引用、函数引用、对象引用
    cgi fastcgi php-cgi php-fpm
    03 : linux判断服务器是虚拟机还是物理机
    02 :history命令显示日期-时间-登录IP-用户名
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6956441.html
Copyright © 2020-2023  润新知