Задать вопрос
evgeniy8705
@evgeniy8705
Повелитель вселенной

Как проверить фильтр потока вывода?

Было задание написать фильтр потока вывода, чтобы он отсеивал байты равные 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);
        }
    }
}
  • Вопрос задан
  • 124 просмотра
Подписаться 2 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@aol-nnov
ну, юнит тесты же!

делаешь инпут стрим из ноликов (ByteArrayInputStream, например), скармливаешь твоему зверю. Если на выходе ничего нет, то что-то работает.
Делаешь еще какой-нить паттерн на входе и ожидаешь какой-то на выходе. сравниваешь с ожиданием.

тесты удобно гонять, например, через JUnit
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы