Index: pkg/http/lib/src/byte_stream.dart |
diff --git a/pkg/http/lib/src/byte_stream.dart b/pkg/http/lib/src/byte_stream.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3de17efad2b7644b22f482eff9cf3cb143288ef2 |
--- /dev/null |
+++ b/pkg/http/lib/src/byte_stream.dart |
@@ -0,0 +1,36 @@ |
+// 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)); |
+} |