Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: sdk/lib/io/file_impl.dart

Issue 14028017: Remove .writeStream, .consume and rewrite IOSink to correctly implement a (sane) well-defined behav… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Review comments. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/io/file.dart ('k') | sdk/lib/io/http.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.io; 5 part of dart.io;
6 6
7 // Read the file in blocks of size 64k. 7 // Read the file in blocks of size 64k.
8 const int _BLOCK_SIZE = 64 * 1024; 8 const int _BLOCK_SIZE = 64 * 1024;
9 9
10 10
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 154
155 _FileStreamConsumer(File this._file, FileMode mode) { 155 _FileStreamConsumer(File this._file, FileMode mode) {
156 _openFuture = _file.open(mode: mode); 156 _openFuture = _file.open(mode: mode);
157 } 157 }
158 158
159 _FileStreamConsumer.fromStdio(int fd) { 159 _FileStreamConsumer.fromStdio(int fd) {
160 assert(1 <= fd && fd <= 2); 160 assert(1 <= fd && fd <= 2);
161 _openFuture = new Future.immediate(_File._openStdioSync(fd)); 161 _openFuture = new Future.immediate(_File._openStdioSync(fd));
162 } 162 }
163 163
164 Future<File> consume(Stream<List<int>> stream) {
165 return addStream(stream).then((_) => close());
166 }
167
168 Future<File> addStream(Stream<List<int>> stream) { 164 Future<File> addStream(Stream<List<int>> stream) {
169 Completer<File> completer = new Completer<File>(); 165 Completer<File> completer = new Completer<File>();
170 _openFuture 166 _openFuture
171 .then((openedFile) { 167 .then((openedFile) {
172 _subscription = stream.listen( 168 _subscription = stream.listen(
173 (d) { 169 (d) {
174 _subscription.pause(); 170 _subscription.pause();
175 openedFile.writeList(d, 0, d.length) 171 openedFile.writeList(d, 0, d.length)
176 .then((_) => _subscription.resume()) 172 .then((_) => _subscription.resume())
177 .catchError((e) { 173 .catchError((e) {
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 String fullPathSync() { 465 String fullPathSync() {
470 var result = _fullPath(_path); 466 var result = _fullPath(_path);
471 throwIfError(result, "Cannot retrieve full path for file '$_path'"); 467 throwIfError(result, "Cannot retrieve full path for file '$_path'");
472 return result; 468 return result;
473 } 469 }
474 470
475 Stream<List<int>> openRead() { 471 Stream<List<int>> openRead() {
476 return new _FileStream(_path); 472 return new _FileStream(_path);
477 } 473 }
478 474
479 IOSink<File> openWrite({FileMode mode: FileMode.WRITE, 475 IOSink openWrite({FileMode mode: FileMode.WRITE,
480 Encoding encoding: Encoding.UTF_8}) { 476 Encoding encoding: Encoding.UTF_8}) {
481 if (mode != FileMode.WRITE && 477 if (mode != FileMode.WRITE &&
482 mode != FileMode.APPEND) { 478 mode != FileMode.APPEND) {
483 throw new FileIOException( 479 throw new FileIOException(
484 "Wrong FileMode. Use FileMode.WRITE or FileMode.APPEND"); 480 "Wrong FileMode. Use FileMode.WRITE or FileMode.APPEND");
485 } 481 }
486 var consumer = new _FileStreamConsumer(this, mode); 482 var consumer = new _FileStreamConsumer(this, mode);
487 return new IOSink<File>(consumer, encoding: encoding); 483 return new IOSink(consumer, encoding: encoding);
488 } 484 }
489 485
490 Future<List<int>> readAsBytes() { 486 Future<List<int>> readAsBytes() {
491 _ensureFileService(); 487 _ensureFileService();
492 Completer<List<int>> completer = new Completer<List<int>>(); 488 Completer<List<int>> completer = new Completer<List<int>>();
493 var chunks = new _BufferList(); 489 var chunks = new _BufferList();
494 openRead().listen( 490 openRead().listen(
495 (d) => chunks.add(d), 491 (d) => chunks.add(d),
496 onDone: () { 492 onDone: () {
497 var result = chunks.readBytes(chunks.length); 493 var result = chunks.readBytes(chunks.length);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 }); 545 });
550 } 546 }
551 547
552 List<String> readAsLinesSync({Encoding encoding: Encoding.UTF_8}) { 548 List<String> readAsLinesSync({Encoding encoding: Encoding.UTF_8}) {
553 return _decodeLines(readAsBytesSync(), encoding); 549 return _decodeLines(readAsBytesSync(), encoding);
554 } 550 }
555 551
556 Future<File> writeAsBytes(List<int> bytes, 552 Future<File> writeAsBytes(List<int> bytes,
557 {FileMode mode: FileMode.WRITE}) { 553 {FileMode mode: FileMode.WRITE}) {
558 try { 554 try {
559 IOSink<File> sink = openWrite(mode: mode); 555 IOSink sink = openWrite(mode: mode);
560 sink.add(bytes); 556 sink.add(bytes);
561 sink.close(); 557 sink.close();
562 return sink.done.then((_) => this);; 558 return sink.done.then((_) => this);;
563 } catch (e) { 559 } catch (e) {
564 return new Future.immediateError(e); 560 return new Future.immediateError(e);
565 } 561 }
566 } 562 }
567 563
568 void writeAsBytesSync(List<int> bytes, {FileMode mode: FileMode.WRITE}) { 564 void writeAsBytesSync(List<int> bytes, {FileMode mode: FileMode.WRITE}) {
569 RandomAccessFile opened = openSync(mode: mode); 565 RandomAccessFile opened = openSync(mode: mode);
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
1054 new FileIOException("File closed '$_path'")); 1050 new FileIOException("File closed '$_path'"));
1055 }); 1051 });
1056 return completer.future; 1052 return completer.future;
1057 } 1053 }
1058 1054
1059 final String _path; 1055 final String _path;
1060 int _id; 1056 int _id;
1061 1057
1062 SendPort _fileService; 1058 SendPort _fileService;
1063 } 1059 }
OLDNEW
« no previous file with comments | « sdk/lib/io/file.dart ('k') | sdk/lib/io/http.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698