0672317bec
Committed: https://code.google.com/p/dart/source/detail?r=18575 Reverted: http://code.google.com/p/dart/source/detail?r=18576 Review URL: https://codereview.chromium.org//12212213 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@18579 260f80e4-7a28-3924-810f-c04153c831b5
40 lines
1.4 KiB
Dart
40 lines
1.4 KiB
Dart
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
library byte_stream;
|
|
|
|
import 'dart:async';
|
|
import 'dart:io';
|
|
import 'dart:scalarlist';
|
|
|
|
import 'utils.dart';
|
|
|
|
/// A stream of chunks of bytes representing a single piece of data.
|
|
class ByteStream extends StreamView<List<int>> {
|
|
ByteStream(Stream<List<int>> stream)
|
|
: super(stream);
|
|
|
|
/// Returns a single-subscription byte stream that will emit the given bytes
|
|
/// in a single chunk.
|
|
factory ByteStream.fromBytes(List<int> bytes) =>
|
|
new ByteStream(streamFromIterable([bytes]));
|
|
|
|
/// Collects the data of this stream in a [Uint8List].
|
|
Future<Uint8List> toBytes() {
|
|
/// TODO(nweiz): use BufferList when issue 6409 is fixed.
|
|
return reduce(<int>[], (buffer, chunk) {
|
|
buffer.addAll(chunk);
|
|
return buffer;
|
|
}).then(toUint8List);
|
|
}
|
|
|
|
/// Collect the data of this stream in a [String], decoded according to
|
|
/// [encoding], which defaults to `Encoding.UTF_8`.
|
|
Future<String> bytesToString([Encoding encoding=Encoding.UTF_8]) =>
|
|
toBytes().then((bytes) => decodeString(bytes, encoding));
|
|
|
|
Stream<String> toStringStream([Encoding encoding=Encoding.UTF_8]) =>
|
|
wrapStream(map((bytes) => decodeString(bytes, encoding)));
|
|
}
|