1

サーバーがAndroidフォンで実行され、クライアントプログラムがPCで実行されている小さなクライアントサーバープログラムを作成しました。サーバーからクライアントに小さなファイル(小さなテキストファイル、ドキュメントファイルなど)を送信すると、まったく問題なく動作します。しかし、より大きなファイル (サイズが 2 から 3 MB の mp3 など) を送信しようとすると、クライアント プログラムは配列サイズのオーバーフローのためにエラーをスローします。

私のPCで実行されているクライアント側のプログラムは次のとおりです。

 package fileClient;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;

public class myFileClient {

    /**
     * @param args
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        int filesize=1022386;
        int bytesRead;
        int currentTot = 0;
        String servAdd="10.142.100.161";
        Socket socket = null;
        InetAddress serverIP=InetAddress.getByName(servAdd);
        byte [] bytearray  = new byte [filesize];

        socket=new Socket(serverIP, 4444);
        InputStream is = socket.getInputStream();
        FileOutputStream fos = new FileOutputStream("//home//evinish//MANA.mp3");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        bytesRead = is.read(bytearray,0,bytearray.length);
        currentTot = bytesRead;

        do {
            bytesRead =
               is.read(bytearray, currentTot, (bytearray.length-currentTot));
            if(bytesRead >= 0) currentTot += bytesRead;
         } while(bytesRead > -1);

         bos.write(bytearray, 0 , currentTot);
         bos.flush();
         bos.close();
         socket.close();
    }

}

コンソール出力に次のエラーが表示されます。

 /usr/lib/jvm/java-6-openjdk-amd64/bin/java: line 3: [: too many arguments
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
    at java.lang.System.arraycopy(Native Method)
    at java.io.BufferedOutputStream.write(BufferedOutputStream.java:128)
    at fileClient.myFileClient.main(myFileClient.java:38)

ファイルサイズ変数を 100MB 程度に増やしてみましたが、それもうまくいきませんでした。誰かがこれを回避する方法を教えてもらえますか?

4

0 に答える 0