读写二进制文件常用的类DataInputStream 和 DataOutputStream

one、使用字节流(DataInputStream ) 读二进制文件

步骤:

1、导入相关类,并抛出异常

2、构造一个数据输入流对象,将文件输入流对象 (fileInputStream )与源数据源(E:\\obge\\Obge.class)关联起来

  注意:要在路径 E:\\obge\\Obge.class  下弄点数据,如帅气的obge

3、利用数据输入流类的方法读取二进制文件中的数据

4、关闭流(close() 方法)

 

two、使用字节流(DataOutputStream )写二进制文件

步骤:

1、导入相关类,并抛出异常

2、构造一个数据输出流对象,将文件输出流对象 (fileOutpuStream)与源数据源(E:\\obge\\Obge.class)关联起来

  注意:要在路径E:\\obge\\Obge.class 下弄点数据,如帅气的obge

3、利用数据输出流类的方法读取二进制文件中的数据

4、关闭流(close() 方法)

 

不过DataInputStream类与 DataOutputStream 类搭配使用,从一个编译好的二进制文件 obge.class 中读取数据,然后复制到另一个二进制文件 CopyObge.class 文件中。

Java生成二进制文件流代码 java处理二进制文件流_java

package com.obge.test2;
/***
 * 从一个编译好的二进制文件 obge.class 中读取数据,然后复制到另一个二进制文件 CopyObge.class 文件中
 */
import java.io.*;
public class DataInputStreamStu {
    public static void main(String[] args) {
        try {
            //创建文件输入流与源文件关联 起来
            FileInputStream fileInputStream = new FileInputStream("E:\\obge\\Obge.class");
            //放到数据输入流中
            DataInputStream dataInputStream = new DataInputStream(fileInputStream);
            //创建文件输出流 关联源文件
            FileOutputStream fileOutputStream = new FileOutputStream("E:\\obge\\CopyObge.class");
            //放到数据输出流中
            DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
            //读写二进制文件
            //定义一个变量做中转站
            int temp;
            //将 Obge.class  中的内容,赋予到 临时中转小小变量中
            while((temp = dataInputStream.read()) != -1) {
                //把读取的数据写到  CopyObge.class 文件中
                dataOutputStream.write(temp);
            }
            //关闭流
            fileInputStream.close();
            dataOutputStream.close();
            System.out.println("执行成功");
        }catch (IOException e){
            e.getMessage();
        }
    }
}

就是class 文件要通过jvm 识别运行,你用记事本打开就是一个乱码,心想就这叫二进制文件

翻译一下看看,好像也不怎么能看懂

Java生成二进制文件流代码 java处理二进制文件流_二进制文件_02

 

 

 

C:\Users\Administrator>E:

E:\>cd obge

E:\obge>javap -v class Obge.class     //将class 文件翻译成可读懂的字节码指令文件
错误: 找不到类: class
Classfile /E:/obge/Obge.class
  Last modified 2020-5-13; size 415 bytes
  MD5 checksum 0ff5abeea5271dbddb23724d92215439
  Compiled from "Obge.java"
public class Obge
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #6.#15         // java/lang/Object."<init>":()V
   #2 = Fieldref           #16.#17        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = String             #18            // 浣犲ソObge
   #4 = Methodref          #19.#20        // java/io/PrintStream.println:(Ljava/lang/String;)V
   #5 = Class              #21            // Obge
   #6 = Class              #22            // java/lang/Object
   #7 = Utf8               <init>
   #8 = Utf8               ()V
   #9 = Utf8               Code
  #10 = Utf8               LineNumberTable
  #11 = Utf8               main
  #12 = Utf8               ([Ljava/lang/String;)V
  #13 = Utf8               SourceFile
  #14 = Utf8               Obge.java
  #15 = NameAndType        #7:#8          // "<init>":()V
  #16 = Class              #23            // java/lang/System
  #17 = NameAndType        #24:#25        // out:Ljava/io/PrintStream;
  #18 = Utf8               浣犲ソObge
  #19 = Class              #26            // java/io/PrintStream
  #20 = NameAndType        #27:#28        // println:(Ljava/lang/String;)V
  #21 = Utf8               Obge
  #22 = Utf8               java/lang/Object
  #23 = Utf8               java/lang/System
  #24 = Utf8               out
  #25 = Utf8               Ljava/io/PrintStream;
  #26 = Utf8               java/io/PrintStream
  #27 = Utf8               println
  #28 = Utf8               (Ljava/lang/String;)V
{
  public Obge();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 1: 0

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
         0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
         3: ldc           #3                  // String 浣犲ソObge
         5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
         8: return
      LineNumberTable:
        line 4: 0
        line 5: 8
}
SourceFile: "Obge.java"

E:\obge>

java 文件

Java生成二进制文件流代码 java处理二进制文件流_java_03

DataInputStream类与 DataOutputStream 类搭配使用,可以按照与平台无关的方式从流中读写基本数据类型(八大基本类型哦)的数据。

注意:   

       DataInputStream  的 readUTF()  方法能读取采用UTF-8 字符集编码的字符串,

             DataOutputStream 的 writeUTF()  方法写入采用UTF-8 字符集编码的字符串

 

three、读写文本文件

Java生成二进制文件流代码 java处理二进制文件流_二进制文件_04

package com.obge.test2;

import java.io.*;

public class DataInputStreamReadStringStu  {
    public static void main(String[] args) throws IOException {

        //使用dataOutputStream.writeUTF 向datautf.txt 写文本
        FileOutputStream fileOutputStream = new FileOutputStream("E:\\obge\\datautf.txt");
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
        DataOutputStream dataOutputStream = new DataOutputStream(bufferedOutputStream);
        //采用utf-8 字符集编码编写字符串
        dataOutputStream.writeUTF("obge帅");
        //其他方式写
//        dataOutputStream.writeByte(1);
//        dataOutputStream.writeChar('d');
        dataOutputStream.close();
        bufferedOutputStream.close();
        fileOutputStream.close();
        
        //使用  dataInputStream.readUTF() 读 采用utf-8 字符集编码编写的 datautf.txt文本文件
        FileInputStream fileInputStream = new FileInputStream("E:\\obge\\datautf.txt");
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        DataInputStream dataInputStream = new DataInputStream(bufferedInputStream);
        //读取采用utf-8 字符集编码编写字符串
        System.out.println(dataInputStream.readUTF());
        //其他方式 读
        //System.out.println(dataInputStream.readByte());
        dataInputStream.close();
        bufferedInputStream.close();
        fileInputStream.close();

    }



}