大神們好,我是新手小白,今天在學(xué)習(xí)Java的IO操作中遇到一個(gè)百思不得其解的問(wèn)題,下面的代碼是今天做的關(guān)于DataInputStream類的練習(xí),我很不解為什么DataInputStream的readUTF方法不需要任何參數(shù),但是卻在讀取的時(shí)候可以知道自己讀取多長(zhǎng),不明白他是怎么知道我當(dāng)初在寫入的時(shí)候?qū)懭氲拈L(zhǎng)度的,他是靠什么控制讀取的范圍的呀???比如下面的程序,readUTF方法就可以知道讀取"昨天"這兩個(gè)字,是怎么知道我就剛好需要讀這兩個(gè)字,而不會(huì)把下面的內(nèi)容給讀出。很是感謝大家的回答
package com.zhang.hello;import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;public class IODataStreamTest { public static void main(String[] args) throws IOException {File file=new File("f:/zhang.dat"); if(!file.exists()){ file.createNewFile(); } DataInputStream dis=new DataInputStream(new FileInputStream(file)); DataOutputStream dos=new DataOutputStream(new FileOutputStream(file));int testInt=2016; double testDouble=10.12; long testLong=20161012;dos.writeInt(testInt); dos.writeDouble(testDouble); dos.writeLong(testLong); //utf-8 一個(gè)中文占3個(gè)字節(jié) dos.writeUTF("昨天"); dos.writeUTF("今天是個(gè)好日子"); dos.close();int testRInt=dis.readInt(); System.out.println(testRInt); double testRDouble=dis.readDouble(); System.out.println(testRDouble); long testRLong=dis.readLong(); System.out.println(testRLong); String testRStr=dis.readUTF();//為什么readUTF知道讀取多長(zhǎng) System.out.println(testRStr); dis.close(); } }
執(zhí)行結(jié)果:
2016
10.12
20161012
昨天