专业的JAVA编程教程与资源

网站首页 > java教程 正文

java数据字节流

temp10 2025-03-05 21:39:21 java教程 204 ℃ 0 评论

/**

* 数据字节流
DataInputStream/DataOutputStream

java数据字节流

* 处理流,提供对java基础数据类型及String的存取方法,数据可以通过数据流直接存取,不需要手动转换类型

*/

public class DataStream1 {

public static void main(String[] args) {

try(DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("iostream/testData")))){

//数据流为字节处理流,需要传入字节节点流,在节点流外套一层缓冲流提高效率

dos.writeBoolean(true);

//直接写入基础数据类型

//.writeBoolean()方法将占1bit的boolean值前面增加7个0组成byte存储,true为00000001,false为00000000

dos.writeByte(255);

//.writeByte()方法会将byte直接写入,占1字节的255为11111111

dos.writeChar('a');

//.writeChar()方法会将char按2字节写入,a为97,存储为00000000 01100001

dos.writeDouble(Math.random());

//double占8字节,存储过程不占用额外空间,将double数值原样保存

dos.writeLong(124L);

//long占8字节

dos.writeUTF("直接写入字符串使用.writeUTF方法");

dos.flush();

}catch (Exception e){

e.printStackTrace();

}

//如果用记事本txt直接打开结果为: a??? | *鐩存帴鍐欏叆瀛楃涓蹭娇鐢?writeUTF鏂规硶

//每种数据存储占用空间不相同,当要读取这些数据时需要使用DataInputStream按存储的顺序来读

try(DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("iostream/testData")))){

//读取必须按照存储的顺序调用读取方法

boolean bo = dis.readBoolean();

//将数据取出直接转换为存储时的数据类型

//如果使用.read()会返回1,且指针同样会转到第二个字节

byte by = dis.readByte();

//.readByte()方法会调用.read(),返回255,如果直接使用.read()也会返回255,byte的读取为0-255,没有负数,如果对65535读取readShort()会返回-1

char ch = dis.readChar();

//如果使用.read()需要两次才能读完char,第一次结果为0,第二次为97,对应字符'a'占用两字节

double dou = dis.readDouble();

//double占8字节,执行8次read()才能将指针移至下一个数据

long lo = dis.readLong();

String st = dis.readUTF();

System.out.println(bo+"\t"+by+"\t"+ch+"\t"+dou+"\t"+lo+"\t"+st);

//结果为true -1 a 0.9184927814592927 124 直接写入字符串使用.writeUTF方法

}catch (Exception e){

e.printStackTrace();

}

//dos.writeChars(".writeChars()方法会将传入的字符串分割成字符顺序存储,在.readChar()时需要一个一个的读取");

//数据流写入基础数据类型会将数据按其二进制的值直接存储,不进行修改(除boolean扩容至8bit),而记事本之所以读取不正确是因为调用了字符集,按字符集的规则(gbk读2字节作为一个字符,UTF-8读3字节作为一个字节)进行解码

//而基础数据类型是直接写入的,没有经过编码,byte的255就是11111111只占1个字节,char的'a'是00000000 01100001占了2个字节,所以无论何种字符集都无法正确读取内容

}

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表