OLD | NEW |
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 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 var consumer = new _FileStreamConsumer(this, mode); | 439 var consumer = new _FileStreamConsumer(this, mode); |
440 return new IOSink(consumer, encoding: encoding); | 440 return new IOSink(consumer, encoding: encoding); |
441 } | 441 } |
442 | 442 |
443 Future<List<int>> readAsBytes() { | 443 Future<List<int>> readAsBytes() { |
444 Future<List<int>> readDataChunked(file) { | 444 Future<List<int>> readDataChunked(file) { |
445 var builder = new BytesBuilder(copy: false); | 445 var builder = new BytesBuilder(copy: false); |
446 var completer = new Completer(); | 446 var completer = new Completer(); |
447 void read() { | 447 void read() { |
448 file.read(_BLOCK_SIZE).then((data) { | 448 file.read(_BLOCK_SIZE).then((data) { |
449 if (data.length > 0) builder.add(data); | 449 if (data.length > 0) { |
450 if (data.length == _BLOCK_SIZE) { | 450 builder.add(data); |
451 read(); | 451 read(); |
452 } else { | 452 } else { |
453 completer.complete(builder.takeBytes()); | 453 completer.complete(builder.takeBytes()); |
454 } | 454 } |
455 }, onError: completer.completeError); | 455 }, onError: completer.completeError); |
456 } | 456 } |
457 read(); | 457 read(); |
458 return completer.future; | 458 return completer.future; |
459 } | 459 } |
460 | 460 |
(...skipping 12 matching lines...) Expand all Loading... |
473 var opened = openSync(); | 473 var opened = openSync(); |
474 try { | 474 try { |
475 var data; | 475 var data; |
476 var length = opened.lengthSync(); | 476 var length = opened.lengthSync(); |
477 if (length == 0) { | 477 if (length == 0) { |
478 // May be character device, try to read it in chunks. | 478 // May be character device, try to read it in chunks. |
479 var builder = new BytesBuilder(copy: false); | 479 var builder = new BytesBuilder(copy: false); |
480 do { | 480 do { |
481 data = opened.readSync(_BLOCK_SIZE); | 481 data = opened.readSync(_BLOCK_SIZE); |
482 if (data.length > 0) builder.add(data); | 482 if (data.length > 0) builder.add(data); |
483 } while (data.length == _BLOCK_SIZE); | 483 } while (data.length > 0); |
484 data = builder.takeBytes(); | 484 data = builder.takeBytes(); |
485 } else { | 485 } else { |
486 data = opened.readSync(length); | 486 data = opened.readSync(length); |
487 } | 487 } |
488 return data; | 488 return data; |
489 } finally { | 489 } finally { |
490 opened.closeSync(); | 490 opened.closeSync(); |
491 } | 491 } |
492 } | 492 } |
493 | 493 |
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1019 void _checkAvailable() { | 1019 void _checkAvailable() { |
1020 if (_asyncDispatched) { | 1020 if (_asyncDispatched) { |
1021 throw new FileSystemException("An async operation is currently pending", | 1021 throw new FileSystemException("An async operation is currently pending", |
1022 path); | 1022 path); |
1023 } | 1023 } |
1024 if (closed) { | 1024 if (closed) { |
1025 throw new FileSystemException("File closed", path); | 1025 throw new FileSystemException("File closed", path); |
1026 } | 1026 } |
1027 } | 1027 } |
1028 } | 1028 } |
OLD | NEW |