Dart: Dart:builtin
dart:builtin are the runtime libraries available to the DartVM. They provide some of the more system level API you would expect such as streams I/O, filesystem I/O, basic TCP socket I/O, platform information, native process invocation. Most of these class implementations do call “native”, which from the point of view of the DartVM means invoking native VM code. “native” tells the VM to look up in a list for the entry that maps to the following argument after “native”.
While Dart is still Alpha these builtin may not be written in stone, so try not to depend on them too much. They can and do provide you with some neat access to native functionality you would commonly need when written shell/system applications.
By including #import(‘dart:builtin’); you can view the builtin dart files from DartEditor. Currently the DartEditor might show warnings when including this module but runtime should not be affected. The truth of the matter is, if you explicitly include ‘dart:builtin’ or not, it is still available to you from implicit inclusion in the DartVM.
The following should give an idea of what built in objects are accessible and how they may be used. The examples should not be considered best practices, just an idea of how you could use them and that they exist. The code is taken from a sample that can be found on Github
Directory
[sourcecode lang=”java”]
Directory d;
if (l.length >= 2) {
d = new Directory(l[1]);
} else {
d = new Directory(".");
}
d.dirHandler = (var dir) {
print("${dir}");
};
d.fileHandler = (var file) {
print("${file}");
};
d.list(true);
[/sourcecode]
File
[sourcecode lang=”java”]
File f = new File(l[0]);
if (!f.existsSync()) {
print("Error: file does not exist");
return;
}
RandomAccessFile r = f.openSync(FileMode.READ);
int length = r.lengthSync();
List buffer = new List(length);
int readLength = r.readListSync(buffer, 0, length);
r.close();
String s = new String.fromCharCodes(buffer);
print(s);
[/sourcecode]
ChunkedInputStream
[sourcecode lang=”java”]
ChunkedInputStream chunkedInputStream = new ChunkedInputStream(f.openInputStream(), 16);
List c = chunkedInputStream.read();
while(c!=null) {
StringBuffer sb = new StringBuffer();
c.forEach((int b) {
sb.add("0x");
if (b.toRadixString(16).length == 1) {
sb.add("0");
}
sb.add(b.toRadixString(16));
sb.add(" ");
});
print(sb.toString());
c = chunkedInputStream.read();
}
[/sourcecode]
InputStream
OutputStream
[sourcecode lang=”java”]
File src = new File(arg[1]);
File dest = new File(arg[2]);
var srcStream = src.openInputStream();
var destStream = dest.openOutputStream();
destStream.write(srcStream.read());
srcStream.close();
destStream.close();
[/sourcecode]
StringInputStream
DynamicListInputStream
ListInputStream
ListOutputStream
Platform
[sourcecode lang=”java”]
Platform p = new Platform();
print(‘{"operatingSystem":${p.operatingSystem()},"numberOfProcessors":${p.numberOfProcessors()},"pathSeparator":${p.pathSeparator()}}’);
[/sourcecode]
Process
[sourcecode lang=”java”]
Process ps = new Process.start(‘ps’, []);
StringBuffer messages = new StringBuffer();
ps.exitHandler = (int status) {
ps.close();
print(messages.toString());
};
ps.stdout.dataHandler = () => _readAll(ps.stdout, messages);
ps.stderr.dataHandler = () => _readAll(ps.stderr, messages);
[/sourcecode]
ServerSocket
[sourcecode lang=”java”]
// initialize the server
serverSocket = new ServerSocket(host, 0, 5);
if (serverSocket == null) {
throw "can’t get server socket";
}
serverSocket.connectionHandler = onConnect;
print("accepting connections on ${host}:${serverSocket.port}");
[/sourcecode]
Socket
[sourcecode lang=”java”]
sendSocket = new Socket(host, serverSocket.port);
if (sendSocket == null) {
throw "can’t get send socket";
}
// send first 4 bytes immediately
for (int i = 0; i < 4; i++) {
sendByte();
}
// send next 4 bytes slowly
new Timer.repeating((Timer t) {
sendByte();
if (bytesSent == bytesTotal) {
sendSocket.close();
t.cancel();
print("finished sending");
}
}, 500);
[/sourcecode]
SocketInputStream
SocketOutputStream
Timer
[sourcecode lang=”java”]
<pre> if (l.length >= 2) {
try {
milliSeconds = (Math.parseInt(l[1]).abs()*milliSeconds);
} catch (BadNumberFormatException ex) {}
}
timer = new Timer((var t) {
print("\nTime elapsed on Timer");
}, milliSeconds);
[/sourcecode]