Я написал простой клиент / сервер в java, который передает файлы с помощью java NIO Socketchannel. Когда я передаю простой текстовый файл из Linux в Windows, все строки возвращаются. Я знаю, что две операционные системы используют разные кодировки символов, но я пытаюсь выяснить, где в процессе я бы это учел.
Когда сервер отправляет файлы, он просто пересылает необработанные байты, считанные FileInputStream
.
Мой клиент читает байты из канала в ByteBuffer, затем я получаю байтовый массив из этого.
socketChannel.read(this.readBuffer);
Я перебираю массив байтов каждый раз, когда получаю больше от канала, в поисках EOF, и если я его не нахожу, я помещаю его в файл:
FileOutputStream fos = new FileOutputStream(filepath);
fos.write(data); //data is my byte[]
fos.close();
Я знаю, что это, вероятно, имеет очевидное решение для некоторых, но я не слишком знаком со всеми этими концепциями.