DataOutputputStream equivalente per DART
-
12-12-2019 - |
Domanda
Sto cercando un Java DataOutputputStream equivalente per DART dove posso scrivere tipi arbitrari (int, stringa, galleggiante, array byte, ecc.).C'è randomaccessfile ma non fornisce un array di byte o valori a doppio float.Bytearray sembra avere alcune funzioni necessarie ma non sono sicuro di come scriverlo su un file o un outputstream.
Soluzione
Ecco un codice semplice che mostra come scrivere un bytearray in un 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);
}
. Altri suggerimenti
Si stabilisce essenzialmente la serializzazione dell'oggetto arbitrario.E mentre il DART VM ne ha uno, non è esposto ai programmatori (è usato solo per lo snapshotting e il passaggio del messaggio).Direi che sarebbe stato un errore esporlo esporlo - in diverse situazioni, abbiamo requisiti diversi per la serializzazione e "una soluzione vera" non funzionerà (Java ci ha mostrato che già).
Ad esempio, sto lavorando su un'implementazione di MsgPack per DART, so che PROTOBUF PORT è anche nei lavori, forse qualcuno inizierà una porta del parsimonia ... Le possibilità sono infinite.
La cosa più vicina che ho trovato è questo pacchetto: https://github.com/tomcaserta/dart_io/.Sfortunatamente c'è un bug quando si legge fino alla fine del byte array - guarda la mia richiesta di tiro in GitHub.
Puoi usare questa classe: https://github.com/tomcaserta/dart_io/blob/master/lib / data_output.dart
Sfortunatamente (a) non gestisce i flussi;(b) Writellong non prende un singolo numero intero.Ho sollevato un problema per il DART SDK: https://github.com/dart-LANG / SDK / problemi / 31166
Modifica: Ho biforcato il pacchetto DART_IO e fissarono i due problemi sopra descritti.Il mio nuovo pacchetto è pubblicato come DART_DATA_IO: https://github.com/markmclaren2/dart_data_io