Generally when a primitive reads from a file, the delegation tree looks like this:
+----------------+
| Your Primitive | Wants to read elements
+----------------+ from a file
|
| file = MA.getFile(..)
| ...
| dataBuf = file.getDataBuffer(..)
| ...
| numRead = file.read(dataBuf, numElements)
|
V
+----------------+
| File Handler | Knows how to interpret
+----------------+ a particular file type
|
| numBytes = numElements * bpe
| io.read(data.getBuf(), 0, numBytes)
|
V
+----------------+
| Resource Type | Knows how to read "raw"
+----------------+ bytes (i.e. low-level I/O)
|
|
V
+----------------+
| Data Source | The "data" (could be on
+----------------+ disk, via HTTP, etc.)