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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top