| Index: runtime/bin/file_impl.dart
|
| ===================================================================
|
| --- runtime/bin/file_impl.dart (revision 3811)
|
| +++ runtime/bin/file_impl.dart (working copy)
|
| @@ -19,11 +19,11 @@
|
| }
|
|
|
| List<int> _read(int bytesToRead) {
|
| - List<int> result = new List<int>(bytesToRead);
|
| + ByteArray result = new ByteArray(bytesToRead);
|
| int bytesRead = _file.readListSync(result, 0, bytesToRead);
|
| if (bytesRead < bytesToRead) {
|
| - List<int> buffer = new List<int>(bytesRead);
|
| - buffer.copyFrom(result, 0, 0, bytesRead);
|
| + ByteArray buffer = new ByteArray(bytesRead);
|
| + buffer.setRange(0, bytesRead, result);
|
| result = buffer;
|
| }
|
| _checkScheduleCallbacks();
|
| @@ -175,7 +175,7 @@
|
| port.toSendPort());
|
| return;
|
| }
|
| - var buffer = new List(_bytes);
|
| + ByteArray buffer = new ByteArray(_bytes);
|
| var result =
|
| new _ReadListResult(_FileUtils.readList(_id, buffer, 0, _bytes),
|
| buffer);
|
| @@ -421,19 +421,24 @@
|
| native "File_ReadList";
|
| static int writeByte(int id, int value) native "File_WriteByte";
|
| static int writeList(int id, List<int> buffer, int offset, int bytes) {
|
| - // When using the Dart C API access to ObjectArray by index is
|
| + // When using the Dart C API to access raw data, using a ByteArray is
|
| // currently much faster. This function will make a copy of the
|
| - // supplied List to an ObjectArray if it isn't already.
|
| - ObjectArray outBuffer;
|
| + // supplied List to a ByteArray if it isn't already.
|
| + List outBuffer;
|
| int outOffset = offset;
|
| - if (buffer is ObjectArray) {
|
| + if (buffer is ByteArray || buffer is ObjectArray) {
|
| outBuffer = buffer;
|
| } else {
|
| - outBuffer = new ObjectArray(bytes);
|
| + outBuffer = new ByteArray(bytes);
|
| outOffset = 0;
|
| int j = offset;
|
| for (int i = 0; i < bytes; i++) {
|
| - outBuffer[i] = buffer[j];
|
| + int value = buffer[j];
|
| + if (value is! int) {
|
| + throw new FileIOException(
|
| + "List element is not an integer at index $j");
|
| + }
|
| + outBuffer[i] = value;
|
| j++;
|
| }
|
| }
|
|
|