Было задание написать фильтр потока вывода, чтобы он отсеивал байты равные 0.
Вроде как написал, и почти уверен что все должно работать. Но теперь не знаю как проверить работоспособность кода. Какие значения можно копировать в другой файл при котором будут байты равные 0, чтобы увидеть что они не скопировались? Или я вообще что то попутал. В общем как проверить написанный код?
import java.io.*;
import java.util.Arrays;
class ZeroFilter {
static void filter(InputStream src, OutputStream dst, int buffSize) throws IOException {
final int ZERO_STATE = 0;
final int NUMBERS_STATE = 1;
byte[] buff = new byte[buffSize];
int count;
while ((count = src.read(buff)) != -1) {
int state = ZERO_STATE;
int fromIndex = -1;
for (int index = 0; index < count; index++) {
byte elem = buff[index];
switch (state) {
case ZERO_STATE:
if (elem == 0) {
state = ZERO_STATE;
} else {
fromIndex = index;
state = NUMBERS_STATE;
}
break;
case NUMBERS_STATE:
if (elem == 0) {
dst.write(Arrays.copyOfRange(buff, fromIndex, index));
state = ZERO_STATE;
} else {
state = NUMBERS_STATE;
}
}
}
if (state == NUMBERS_STATE) {
dst.write(Arrays.copyOfRange(buff, fromIndex, buff.length));
}
}
// while (true) {
// int value = src.read();
//
// if (value > 0) {
// dst.write(value);
// } else if (value == -1) {
// break;
// }
// }
}
}
public class App {
public static void main(String[] args) throws IOException {
try (FileInputStream fis = new FileInputStream("c://infile.txt"); FileOutputStream fos = new FileOutputStream("c://outfile.txt")) {
ZeroFilter.filter(fis, fos, 16);
}
}
}