zoukankan      html  css  js  c++  java
  • Java基础之I/O流

      一.什么是流?

      1. I/O的定义 :  Input/Out   入/出

       Java通过来执行I/O

      2.什么是流?

         流,是一种抽象的东西,咱们先抛开I/O不说,单说计算机中,如果想要让软件来改变硬件(比如在硬盘上添加一些txt等),就得依靠流来让硬件发生变化;

       Java中讲的I/O就是这样的一种,I/O是一门自带流属性的技术,我理解为它就是一种具有偏向性的流;

       I/O流简称,他的中文学名叫做 "I/O 基于流", 完成数据的 入 / 出 操作,建立在流的基础上.

    二.字符流和字节流的特点和区别

    • 字节是一种单位,也就是Byte, 表示数据量的多少,它计算机中存储容量的一种计量单位;
    • 字符是指计算机啊中使用的文字符号,比如"1,2,3,4,A,V,C,a,e,r,@,$,%"…等

      字节和字符,它们完全不是一个概念,一个是计量单位,一个是纯粹的名词. 并且在不同的字节编码里,字符和字节的对应关系不同,指的是字符的字节单位大小不同;

      •   Ascll码中,一个引文字母(不分大小写)占用一个字节空格键,一个汉字占用两个字节空间,一个二进制数字占用一个字节空间
      •        UTF-8编码中,一个英文字符等于一个字节,一个中文等于两字节
      •        Unicode编码中, 所有字符占两个字节
      •      UTF-16编码中,一个英文占用两个字节,一个中文占用两个字节(有一些UNICODE补充的中文汉字要占用4个字节)
      •   UTF-32编码中,任何字符存储都要占用四个字节

            (来自百度,了解个大概,个人不清楚各种编码详细情况)

            具体可以借鉴:一个讲关于编码很详细的介绍 斟酌观看

                

        个人理解..

         根据上面的理解,因为一开始的字符都是一个字节,慢慢的全球化开启因为各地的语言使用出现了字符,一个字符占用两个字节单位,字节是根本,一切的一切都是按照字节来的;

        字符是字节的一种替代,各有所用,但是字节是基本的东西,字符是一种根据编码集翻译出来的产物;

        

    三. 字符流和字节流的区别

      1.字节流:顾名思义,在以字节为基本操作基础的情况下对流进行定义;

       2.字符流:是以字符为操作基础,它使用的编码表是Unicode,所以可以国际化,并且在某些情况下,字符流比字节流更高效,

         但是底层上,字符流也是基于字节流的; (就好像,Java用操作符可以完成数组排序,但实际上用一些工具类的方

            法可以快速完成数组排序;)

     

     

      3. 在Java的概念中,实现I/O流的方法

     

     

     

     

         本质上,底层里,字符流是基于字节留的,底层运行的时候最基本的还是字节流; 

     

    四.预定义流

      Java程序一定会先倒入lang包,该包包含一个System类,它封装了运行时环境的几个要素,其中有三个预定义流变量,

      分别是,in out err; 在System中分别被定义为public,final,static;

    • System.out是标准输出流,默认情况下是控制台,是InputStream类型的对象;
    • System.in是标准输入流,默认情况下是键盘,是PrintStream类型的对象;
    • System.err是标准错误流,默认情况下是控制台,也是PrintStream类型的对象;

      尽管他们通常用于对控制台的输入和读写,但这些都是字节流,因为预定义流没有包含字符流的java原始规范,

      所以他们不是字符流而是字节流

     

     

    五.

      1.读取控制台输入

       对于商业代码而言,读取控制台输入的首选项是使用字符流,因为这样做可以使程序更易国际化,更易维护,而且直接操作字符要比在字符字节之间来回切换转换方便的多;

        

     public static void main(String[] args) throws IOException {
            byte[] date = new byte[10];
            System.out.println("输入一些数");
          /*  System.in 返回从控制台输入字符  read
            从输入流读取数据的下一个字节。 值字节返回为int ,范围为0至255 。
             如果没有字节可用,因为已经到达流的末尾,则返回值-1 。
             该方法阻塞直到输入数据可用,检测到流的结尾,或抛出异常。*/
            System.in.read(date);
            //System.in.rean输入不存在什么输多了,read方法把输入的字符存储好到内存中,然后再
            //向date数组中存放,从内存中的第一个开始往里面灌,灌满为止,剩下多余的被回收
    
            for (byte b : date) {
                //如果直接输入b,那就相当与把输入的字节的底层ascll码给转为String了
                 // 就会直接输出输入字符所代表的ascll码
              //System.out.println(b);
                System.out.println((char)b);//将ascll转换为字符形式,输出的是ascll代表的字符
    
            }
        }
        

     

      2.写入,控制台输出

      

    public static void main(String[] args) {
        int b=12;
        //向屏幕写入一个字节 ,他不会将十进制Ascll码转换为字符串,而是直接转换为字符
        //或者说  字符类型(char)  会隐式转换为int类型
        System.out.write(b); //write()的写入目标是控制台
        System.out.write('\n');
    
    }

     

      而System.in.read(); 是输入;流

      将一些东西读取 到程序中;

     

     

     

     网太慢,明天更

  • 相关阅读:
    远程服务器上的weblogic项目管理(二)发布完成后如何重启weblogic容器
    Oracle中日期和时间类函数
    程序员应如何提高实效?读《程序员修炼之道》有感
    远程服务器上的weblogic项目管理(一)项目部署与更新流程
    远程服务器上的weblogic项目管理(四)filelock not found错误解决方法
    浅拷贝与深拷贝
    for...of 与 for...in
    工厂函数创建对象
    Promise
    闭包内存泄漏解决方法
  • 原文地址:https://www.cnblogs.com/lyuweigh/p/9588514.html
Copyright © 2011-2022 走看看