读写二进制文件常用的类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 文件中。
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 识别运行,你用记事本打开就是一个乱码,心想就这叫二进制文件
翻译一下看看,好像也不怎么能看懂
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 文件
DataInputStream类与 DataOutputStream 类搭配使用,可以按照与平台无关的方式从流中读写基本数据类型(八大基本类型哦)的数据。
注意:
DataInputStream 的 readUTF() 方法能读取采用UTF-8 字符集编码的字符串,
DataOutputStream 的 writeUTF() 方法写入采用UTF-8 字符集编码的字符串
three、读写文本文件
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();
}
}