[英]writeDouble() method of DataOutputStream is writing data in text document in encoded form
我有以下代碼
public static void main(String aed[]){
double d=17.3;
try{
DataOutputStream out=null;
out=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("new.txt")));
out.writeDouble(d);
out.flush();
}catch(FileNotFoundException fnf){
fnf.printStackTrace();
}catch(IOException io){
io.printStackTrace();
}
}
現在,我將此double值寫入文本文件new.txt,但是以下值正在文本文件中獲取
@1LÌÌÌÌÍ
但是當我使用
out.writeUTF(""+d)
工作正常。 請解釋此處進行的編碼。
在Java中,通常有兩類變量,即引用類型和基本類型。
您的原始類型包括int,double,byte,char,boolean,long,short和float。 它們存儲一個值,並在內存中由16位Unicode整數表示。
引用類型保存存儲位置並引用某些對象。 (字符串/ UTF是引用類型),因此可以看到實際值
二進制文件不是供您讀取的,而是由程序以正確的格式和順序讀取值的,並且您使用的方法應僅用於寫入保存實際數據的二進制文件(.dat)各自形式的值(整數,雙精度等)。 寫入文本文件(.txt)時,僅應寫入字符串。
寫入文本文件:
try{
PrintWriter write=new PrintWriter("your filepath",true);
write.println("whatever needs to be written");
write.close();
}
catch(FileNotFoundException){
}
閱讀 :
Scanner read;
try{
read=new Scanner(new FileReader("your path"));
while(read.hasNext()){
System.out.println(read.nextLine);
}
read.close();
}
catch(FileNotFoundException e){
}
使用DataOutputStream
您正在寫入字節,字節表示一個雙精度值(即數字值),而不是該數字的可讀版本。
例:
整數i = 8;
在二進制中,i的值為'0100',這是計算機管理的值。...但是,您不想寫入位'0100',因為您想讀取某些內容,而不是值。 您需要CHARACTER'8',因此必須將double轉換為character(因為可讀性,轉換為String也是有效的。)
這就是您使用(“” + d)所做的事情:將其轉換為String。
使用Writer編寫文本文件(可使用BufferedWriter和FileWriter,有關更多詳細信息,請檢查此內容)
java.io.DataOuputStream.writeUTF(String str)
將兩個字節的長度信息寫入輸出流,然后是字符串s中每個字符的修改后的UTF-8表示形式。
writeDouble(double v)
使用Double類中的doubleToLongBits方法將double參數轉換為long,然后將該long值作為8字節的數量寫入高位字節的基礎輸出流。
閱讀Javadoc:
https://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html
writeDouble(Double)
方法不使用UTF-8編碼。 如果您使用writeDoble()
編寫了一個double,則應該使用DataInputStream
readDouble
方法讀取它。 這些文件不是要手動修改或讀取的文件。 如果要簡單地說,則堅持使用writeUTF
方法。
從文檔-
writeDouble -
使用Double類中的doubleToLongBits方法將double參數轉換為long,然后將該long值作為8字節的數量寫入高位字節的基礎輸出流。
writeDouble
(作為另一個writeByte
, writeShort
等,具有相應的字節大小)將寫入8個字節的雙writeDouble
值表示形式。 這就是為什么類稱為DataOutputStream
( Data )的原因。
writeUTF
寫入2個字節的長度和實際字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.