twonly-app-dependencies/exif/lib/src/linereader.dart
2026-05-31 01:24:27 +02:00

57 lines
1.1 KiB
Dart

import 'dart:convert';
import 'package:exif/src/file_interface.dart';
class LineReader {
FileReader file;
final List<int> _buffer = [];
bool _endOfFile = false;
LineReader(this.file);
String popString(int n) {
String s;
if (n < _buffer.length) {
s = utf8.decode(_buffer.sublist(0, n));
_buffer.removeRange(0, n);
} else {
s = utf8.decode(_buffer);
_buffer.clear();
}
return s;
}
String readLine() {
int endOfLine = _buffer.indexOf(10);
if (endOfLine >= 0) {
return popString(endOfLine + 1);
}
if (_endOfFile) {
return popString(_buffer.length);
}
while (true) {
final r = file.readSync(1024 * 10);
if (r.isEmpty) {
_endOfFile = true;
endOfLine = -1;
} else {
endOfLine = r.indexOf(10);
_buffer.addAll(r);
if (endOfLine >= 0) {
endOfLine += _buffer.length;
}
}
if (endOfLine >= 0) {
return popString(endOfLine + 1);
} else if (_endOfFile) {
return popString(_buffer.length);
}
}
}
}