3

これは簡単なはずですが、今は理解できません。次のように、ソケットを介していくつかのバイトを送信したい

Socket s = new Socket("localhost", TCP_SERVER_PORT);
DataInputStream is = new DataInputStream(new BufferedInputStream(s.getInputStream()));

DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));

for (int j=0; j<40; j++) {
  dos.writeByte(0);
}

それはうまくいきますが、今はOutputstreamにByteを書きたくありませんが、バイナリファイルから読み込んでから書き出します。私は知っています(?) FileInputStream から読み取る必要があります。全体を構築するためのホットな方法がわかりません。

誰かが私を助けることができますか?

4

3 に答える 3

4
public void transfer(final File f, final String host, final int port) throws IOException {
    final Socket socket = new Socket(host, port);
    final BufferedOutputStream outStream = new BufferedOutputStream(socket.getOutputStream());
    final BufferedInputStream inStream = new BufferedInputStream(new FileInputStream(f));
    final byte[] buffer = new byte[4096];
    for (int read = inStream.read(buffer); read >= 0; read = inStream.read(buffer))
        outStream.write(buffer, 0, read);
    inStream.close();
    outStream.close();
}

これは、適切な例外処理を行わない素朴なアプローチです。実際の設定では、エラーが発生した場合は必ずストリームを閉じる必要があります。

ストリームに代わるものだけでなく、Channel クラスもチェックしてみてください。たとえば、FileChannel インスタンスは、はるかに効率的な transferTo(...) メソッドを提供します。

于 2012-05-16T12:33:47.377 に答える
2
        Socket s = new Socket("localhost", TCP_SERVER_PORT);

        String fileName = "....";

fileName を使用して FileInputStream を作成する

    FileInputStream fis = new FileInputStream(fileName);

FileInputStream ファイル オブジェクトを作成する

        FileInputStream fis = new FileInputStream(new File(fileName));

ファイルから読み取る

    DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(
        s.getOutputStream()));

バイトごとに読み取る

    int element;
    while((element = fis.read()) !=1)
    {
        dos.write(element);
    }

またはバッファごとに読み取る

byte[] byteBuffer = new byte[1024]; // buffer

    while(fis.read(byteBuffer)!= -1)
    {
        dos.write(byteBuffer);
    }

    dos.close();
    fis.close();
于 2012-05-16T12:41:03.333 に答える
0

入力からバイトを読み取り、同じバイトを出力に書き込みます

またはバイトバッファを使用すると、次のようになります。

inputStream fis=new fileInputStream(file);
byte[] buff = new byte[1024];
int read;
while((read=fis.read(buff))>=0){
    dos.write(buff,0,read);
}

これには DataStreams を使用する必要がないことに注意してください

于 2012-05-16T12:30:02.123 に答える