package com.elharo.io;
import java.io.*;
public class PrintableInputStream extends FilterInputStream {
public PrintableInputStream(InputStream in) {
super(in);
}
public int read() throws IOException {
int b = in.read();
// printing, ASCII characters
if (b >= 32 && b <= 126) return b;
else if (b == '\n' || b == '\r' || b == '\t') return b;
// nonprinting characters
else return '?';
}
public int read(byte[] data, int offset, int length) throws IOException {
int result = in.read(data, offset, length);
for (int i = offset; i < offset+result; i++) {
// Do nothing with the printing characters.
if (data[i] == '\n'|| data[i] == '\r' || data[i] == '\t' || data[i] == -1) ;
// nonprinting characters
else if (data[i] < 32 || data[i] > 126) data[i] = (byte) '?';
}
return result;
}
}
|