У меня проблема с одной из задач: Прочитать из консоли 3 имени файла: file1, file2, file3. Разделить файл: сохранить половину байтов в файл2, а вторую половину - в файл3. Если количество байтов меньше, сохраните больше байтов в file2. Закройте потоки.
Мне было интересно, как это решить, и единственное решение, которое работает правильно:
public class main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String a = reader.readLine();
String b = reader.readLine();
String c = reader.readLine();
FileInputStream fileInputStream1 = new FileInputStream(a);
FileOutputStream fileOutputStream2 = new FileOutputStream(b);
FileOutputStream fileOutputStream3 = new FileOutputStream(c);
byte[] buffer = new byte[fileInputStream1.available()];
if (fileInputStream1.available() % 2 != 0) {
while (fileInputStream1.available() > 0) {
int count = fileInputStream1.read(buffer);
fileOutputStream2.write(buffer, 0, count / 2+1);
fileOutputStream3.write(buffer, count / 2+1, count/2);
}
} else {
while (fileInputStream1.available() > 0) {
int count = fileInputStream1.read(buffer);
fileOutputStream2.write(buffer, 0, count / 2);
fileOutputStream3.write(buffer, count / 2, count/2);
}
}
fileInputStream1.close();
fileOutputStream2.close();
fileOutputStream3.close();
}
}
Мой вопрос: почему мне нужно сохранять из count / 2 для подсчета / 2? Для меня это не имеет никакого смысла. Если я буду использовать числа, предположим, что файл file1 имеет 100 байт. Я сохраняю от 0 до count / 2 (100/2 = 50) и от count / 2 до count / 2 (от 100/2 = 50 до 100/2 = 50 или даже 50/2 = 25). На мой взгляд, это должно быть от 0 до count / 2 и от count / 2 до count или buffer.length
Пожалуйста, объясните мне, почему мои решения неверны по сравнению с правильным. Спасибо.