자바 NIO Socketchannel을 사용하여 파일을 전송하는 간단한 클라이언트/서버를 작성했습니다. Linux에서 Windows로 간단한 텍스트 파일을 전송할 때 줄 바꿈은 모두 사라졌습니다. 두 운영 체제가 서로 다른 문자 인코딩을 사용한다는 것을 알고 있지만 프로세스의 어느 부분을 고려해야하는지 알아 내려고합니다.리눅스에서 창으로의 전송에서 줄 바꿈 문자가 사라짐
서버가 파일을 전송하면 그냥 원시 바이트를 보내고 FileInputStream
으로 읽습니다.
클라이언트가 채널의 바이트를 ByteBuffer로 읽은 다음 바이트 배열을 가져옵니다.
FileOutputStream fos = new FileOutputStream(filepath);
fos.write(data); //data is my byte[]
fos.close();
: 바이트의 배열 내가 EOF를 찾고, 채널에서 더 받고, 내가 그것을 찾을 수없는 경우, 내가 파일에 넣을 때마다 통해
socketChannel.read(this.readBuffer);
I 루프 나는 이것이 아마도 명백한 해결책을 가지고 있음을 알고 있지만, 관련된 모든 개념에 너무 익숙하지 않다.
을 FileReader 대신에 당신이 FileInputStream에를 사용하는 이유라도? FileInputStream의 doc로부터 : FileInputStream는, 이미지 데이터 등의 raw 바이트의 스트림을 읽어 들이기 위해서 (때문에) 사용됩니다. 문자 스트림을 읽으려면 FileReader 사용을 고려하십시오. – GoingTharn
FileReader가 개행 문자를 존중/보존하기 때문에 물어 보았습니다. (비록 내가 java.io를 사용한 이후로 8 개월 이상 지났음) – GoingTharn