二进制基础&JAVA I/O输入输出流

 

  1. 二进制位运算

 

  1. 位运算的特殊用法
    1. 清零。与一个各位都为零的数值相与
    2. 取一个数中指定位。例:X=10101110,取X的低四位,用X&000 1111 = 0000 1110
    3. 两个变量交换值的方法:A= A^B;B=A^B;A=A^B;(A=A+B;B=A-B;A= A-B;)
  2. 原码&反码&补码
    1. 原码:一个证书按照绝对值大小转换成的二进制数称为原码。
    2. 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
    3. 补码:反码加一称为补码(负数以其正值的补码形式表示)。
  1. Java内置的进制转换

 

  1. 进制转换

    十进制转成十六进制:

    Integer.toHexString(int i)

    十进制转成八进制

    Integer.toOctalString(int i)

    十进制转成二进制

    Integer.toBinaryString(int i)

    十六进制转成十进制

    Integer.valueOf("FFFF",16).toString()

    八进制转成十进制

    Integer.valueOf("876",8).toString()

    二进制转十进制

    Integer.valueOf("0101",2).toString()

    有什么方法可以直接将2,8,16进制直接转换为10进制的吗?

    java.lang.Integer类

    parseInt(String s, int radix)

    使用第二个参数指定的基数,将字符串参数解析为有符号的整数。

  2. 大小端

    小端法:低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端;

    大端法:高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。

  1. Java文件传输基础

 

  1. File类常用API

    Java.io.File类用于表示文件(目录)

    File类只用于表示文件(目录)的信息(名称、大小等),不能用于表示内容的访问。

  2. RandomAccessFile

    Java提供的对文件内容的访问,既可以读文件,也可以写文件

    支持随机访问文件,可以访问文件的任意位置

    1. Java文件模型:在硬盘是文件是byte byte byte存储的,是数据的集合
    2. 打开文件:有两种模式"rw"(读写)、"r"(只读)
    3. RandomAccessFile raf = new RandomAcceFile(file, "rw");

      文件指针,打开文件时指针在开头pointer = 0;

    4. 读方法:int b = raf.read()--->读一个字节
    5. 写方法:raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
    6. 文件读写完成后一定要关闭(Oracle官方说明,会产生未知错误)
  3. Java字节流
    1. InputStream抽象了应用程序读取数据的方式;OutputStream抽象了应用程序写出数据的方式

      EOF = End 读到-1就读到了结尾

    2. 输入流的基本方法:

      int b = in.read();//读取一个字节无符号填充到int的低8位。-1是EOF

      In.read(byte[] buf);//读取数据填充到字节数组buf

      In.read(byte[] buf, int start, int size);//读取数据到字节数组

    3. 输出流的基本方法:

      Out.write(int b);// 写出一个byte到流,b的低8位

      Out.write(byte[] buf);//将buf字节数组都写入到流

      Out.write(byte[] buf, int start, int end)

    4. FileInputStream--->具体实现了在文件上读取数据
    5. BufferedInputStream&BufferedOutputStream这两个刘类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时都会加上缓冲,这种流模式提高了IO的性能。

      FileOutputStream--->write()方法

      DataOutputStream--->writeXxx()方法

      BufferedOutputStream--->write()方法

  4. Java字符流
    1. 编码问题
    2. 认识文本和文本文件

      Java文本(char)是16位无符号整数,是字符的Unicode编码(双字节编码)

      文件是byte byte byte … 的数据序列

      文本文件是文本(char)序列按照魔种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果

    3. 字符流(Reader Writer)

      字符的处理,一次处理一个字符

      字符的底层仍然是基本的字节序列

      字符流的基本实现:

      InputStreamReader:完成byte流解析为char流,按照编码解析

      OutputStreamWriter:提供char流到byte流,按照编码处理

       

      FileReader/FileWriter:直接对文件进行读写(注意编码格式)

       

      BufferedReader--->readLine 一次读一行

      BufferedWriter/printWriter--->写一行

  5. 对象的序列化,反序列化
    1. 对象序列化:将Object转换成byte序列,反之叫对象的反序列化
    2. 序列化流(ObjectOutputStream),是过滤流--->writeObject

      反序列化流(ObjectInputStream)--->readObject

    3. 序列化接口(Serializable)

      对象必须实现序列化接口,才能实现序列化,否则将出现异常

      这个接口没有任何方法,只是一个标准

    4. transient关键字

      private void writeObject(java.io.ObjectOutputStream s)

      throws java.io.IOException{

          s.defaultWriteObject();//把jvm能默认序列化的元素进行序列化操作

          s.writeInt(stuage);//自己完成stuage的序列化

      }

          

      private void readObject(java.io.ObjectInputStream s)

          throws java.io.IOException, ClassNotFoundException{

          s.defaultReadObject();//把jvm能默认反序列化的元素进行反序列化

          this.stuage = s.readInt();//自己完成stuage的反序列化操作

      }

      分析ArrayList原码中序列化与反系列化的问题

      序列化中子类和父类构造函数的调用问题

转载于:https://www.cnblogs.com/willhunting/p/5098306.html

你可能感兴趣的:(二进制基础&JAVA I/O输入输出流)