簡體   English   中英

DataOutputStream的writeDouble()方法以編碼形式在文本文檔中寫入數據

[英]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 (作為另一個writeBytewriteShort等,具有相應的字節大小)將寫入8個字節的雙writeDouble值表示形式。 這就是為什么類稱為DataOutputStreamData )的原因。

writeUTF寫入2個字節的長度和實際字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM