Skip to content

Commit bbb5172

Browse files
ctruedengab1one
authored andcommitted
DataHandle: provide some default implementations
1 parent e12e8b9 commit bbb5172

File tree

1 file changed

+101
-1
lines changed

1 file changed

+101
-1
lines changed

src/main/java/org/scijava/io/DataHandle.java

Lines changed: 101 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,9 @@ default String findString(final boolean saveString, final int blockSize,
330330
* @return the next byte of data, or -1 if the end of the stream is reached.
331331
* @throws IOException - if an I/O error occurs.
332332
*/
333-
int read() throws IOException;
333+
default int read() throws IOException {
334+
return offset() < length() ? readByte() & 0xff : -1;
335+
}
334336

335337
/**
336338
* Reads up to b.length bytes of data from the stream into an array of bytes.
@@ -368,4 +370,102 @@ default long skip(final long n) throws IOException {
368370
return num;
369371
}
370372

373+
// -- DataInput methods --
374+
375+
@Override
376+
default boolean readBoolean() throws IOException {
377+
return readByte() != 0;
378+
}
379+
380+
@Override
381+
default void readFully(final byte[] b) throws IOException {
382+
readFully(b, 0, b.length);
383+
}
384+
385+
@Override
386+
default int readUnsignedByte() throws IOException {
387+
return readByte() & 0xff;
388+
}
389+
390+
@Override
391+
default int readUnsignedShort() throws IOException {
392+
return readShort() & 0xffff;
393+
}
394+
395+
@Override
396+
default String readLine() throws IOException {
397+
// NB: Code adapted from java.io.RandomAccessFile.readLine().
398+
399+
final StringBuffer input = new StringBuffer();
400+
int c = -1;
401+
boolean eol = false;
402+
403+
while (!eol) {
404+
switch (c = read()) {
405+
case -1:
406+
case '\n':
407+
eol = true;
408+
break;
409+
case '\r':
410+
eol = true;
411+
long cur = offset();
412+
if (read() != '\n') seek(cur);
413+
break;
414+
default:
415+
input.append((char)c);
416+
break;
417+
}
418+
}
419+
420+
if (c == -1 && input.length() == 0) {
421+
return null;
422+
}
423+
return input.toString();
424+
}
425+
426+
@Override
427+
default String readUTF() throws IOException {
428+
final int length = readUnsignedShort();
429+
final byte[] b = new byte[length];
430+
read(b);
431+
return new String(b, "UTF-8");
432+
}
433+
434+
@Override
435+
default int skipBytes(final int n) throws IOException {
436+
final int skipped = (int) Math.min(n, length() - offset());
437+
if (skipped < 0) return 0;
438+
seek(offset() + skipped);
439+
return skipped;
440+
}
441+
442+
// -- DataOutput methods --
443+
444+
@Override
445+
default void write(final byte[] b) throws IOException {
446+
write(b, 0, b.length);
447+
}
448+
449+
@Override
450+
default void writeBoolean(final boolean v) throws IOException {
451+
write(v ? 1 : 0);
452+
}
453+
454+
@Override
455+
default void writeByte(final int v) throws IOException {
456+
write(v);
457+
}
458+
459+
@Override
460+
default void writeBytes(final String s) throws IOException {
461+
write(s.getBytes("UTF-8"));
462+
}
463+
464+
@Override
465+
default void writeUTF(final String str) throws IOException {
466+
final byte[] b = str.getBytes("UTF-8");
467+
writeShort(b.length);
468+
write(b);
469+
}
470+
371471
}

0 commit comments

Comments
 (0)