私は、Java NIO Socketchannelを使ってファイルを転送する単純なクライアント/サーバをjavaで作成しました。 LinuxからWindowsに単純なテキストファイルを転送すると、改行はすべて消えてしまいます。私は2つのオペレーティングシステムが異なる文字エンコーディングを使用していることを知っていますが、プロセスのどこでそれを考慮に入れようとしています。Linuxからウィンドウへの転送で改行文字が失われた
サーバーがファイルを送信すると、生のバイトが送信され、FileInputStream
で読み取られます。
クライアントがチャネルのバイトをByteBufferに読み込むと、バイト配列が取得されます。バイトの配列によって
socketChannel.read(this.readBuffer);
Iループ私はEOFを探して、チャンネルからより多くを受け取るたびに、私はそれを見つけていない場合、私は、ファイルにそれを置く:
FileOutputStream fos = new FileOutputStream(filepath);
fos.write(data); //data is my byte[]
fos.close();
私はこれが明らかにいくつかの明らかな解決策を持っていることを知っているが、私は関与するすべての概念にあまり慣れていない。
あなたがFileReaderをの代わりにFileInputStreamのを使用している任意の理由は? FileInputStreamのドキュメントから:FileInputStreamは、画像データなどの生のバイトストリームを読み込むためのものです。文字のストリームを読み込むには、FileReaderの使用を検討してください。 – GoingTharn
FileReaderがあなたのために改行を尊重/保存するので、私は尋ねました。 (私はjava.ioを使用してから8ヶ月も経ちましたが) – GoingTharn