Задачу сдал читая по одному байту, не сразу допер как распределить буфер чередуя файлы.
Код сданной задачи не указал, т.к. вопрос о другом.
Почему почти:
- Цель сделать буфер размером не в весь файл, а на любое кол-во байт.
- В этом варианте не проверяю четность байт для разделения по файлам, вместо этого добавлена переменная, указывающая нужное кол-во байт для файла №2, остальное пишется в файл № 3.
Хотелось бы увидеть ваши решения такого варианта этой задачи, можно в личку.
import java.io.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try (FileInputStream file1 = new FileInputStream(reader.readLine());
FileOutputStream file2 = new FileOutputStream(reader.readLine());
FileOutputStream file3 = new FileOutputStream(reader.readLine())) {
byte[] buffer = new byte[100]; // указываем размер буфера
int needToWrite = 10; // указываем нужное кол-во байт для файла № 2
int data;
int bytesCount = 0;
boolean canWriteFile1 = true;
boolean canWriteFile2 = false;
boolean offset = false;
int offsetNumber;
while (file1.available() > 0) {
data = file1.read(buffer);
// Пишу в файл № 2, пока не достигнуто кол-во байт в needToWrite
if (canWriteFile1) {
if (bytesCount + data <= needToWrite) {
file2.write(buffer);
bytesCount += data;
} else {
// Если кол-во байт в буфере больше, чем нужно - отсекаю
file2.write(buffer, 0, needToWrite - bytesCount);
bytesCount += (needToWrite - bytesCount);
canWriteFile1 = false;
canWriteFile2 = true;
offset = true;
}
}
if (canWriteFile2) {
if (offset) { // Пишем в файл № 3 только остаток буфера после отсечения (если оно было)
if (bytesCount >= needToWrite) {
offsetNumber = bytesCount % buffer.length;
file3.write(buffer, offsetNumber, data - offsetNumber);
offset = false;
}
} else {
file3.write(buffer, 0, data);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}