2012-10-02 45 views
3

我正在尋找一個Java DataOutputStream相當於Dart,我可以寫任意類型(int,string,float,byte array等)。有RandomAccessFile,但它不提供字節數組或float-double值。 ByteArray似乎有一些必要的功能,但我不知道如何將它寫入文件或OutputStream。DataOutputStream相當於飛鏢

回答

2

這裏是展示如何寫的ByteArray到的OutputStream一些簡單的代碼:

#import('dart:io'); 
#import('dart:scalarlist'); 

main() { 
     File file = new File("c:\\temp\\foo.txt"); 
     OutputStream os = file.openOutputStream(); 
     os.onNoPendingWrites =() { 
       print('Finished writing. Closing.'); 
       os.flush(); 
       os.close(); 
     }; 
     Uint8List byteList = new Uint8List(64); 
     ByteArray byteArray = byteList.asByteArray(); 
     int offset = 0; 
     offset = byteArray.setUint8(offset, 72); 
     offset = byteArray.setUint8(offset, 101); 
     offset = byteArray.setUint8(offset, 108); 
     offset = byteArray.setUint8(offset, 108); 
     offset = byteArray.setUint8(offset, 111); 
     offset = byteArray.setUint8(offset, 0); 
     byteArray.setFloat32(offset, 1.0); 
     os.write(byteList); 
} 
+0

感謝這似乎是好的,但這樣做很麻煩。希望對io的更好支持即將推出。 – afsina

+0

Dart基礎庫將在不久的將來更新。確保你提交了一個有你的特定需求的錯誤。 – Cutch

0

你基本上是要求任意對象序列化。而Dart虛擬機有一個,它不會暴露給程序員(它僅用於快照和消息傳遞)。我會說,揭示它會是一個錯誤 - 在不同的情況下,我們對序列化有不同的要求,「一個真正的解決方案」是不會工作的(Java已經向我們表明了這一點)。

例如,我正在研究Dart的MsgPack實現,我知道Protobuf端口也在工作中,也許有人會啓動Thrift端口......可能性是無限的。

+0

他的要求不限於任意對象序列化。我認爲有一些類似於DataInputstream/DataOutputStream是合理的。如果您正在閱讀具有特定佈局的二進制格式文件(壓縮文件,Adobe colorbook文件,數千個),或者您想控制輸出文件的精確佈局,這些特別有用。 Protobufs和其他人不提供這一點。 – mdakin

+0

糟糕,你是對的,我錯了。但是,在ByteArray和OutputStream之上寫一個簡單的抽象非常簡單。 – Ladicek