私はJavaでソケットを介してファイルを転送しようとしています。実際には転送できました。しかし、問題が発生しました。私は300メガバイトのファイルを転送例えば、クライアントが..私は問題があるかもしれないと思いまして....Javaのソケットを介してファイルを転送
サーバー側
File myFile = new File (basePath+"\\"+input.readUTF());
byte [] mybytearray = new byte [1024];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
txtArea.append("Sending... \n");
while (true)
{
int i = bis.read(mybytearray, 0, mybytearray.length);
if (i == -1) {
break;
}
output.write(mybytearray, 0, i);
txtArea.append("Sending chunk " + i + "\n");
}
output.flush();
クライアント側
output.writeUTF("get");
txtArea.append("Starting to recive file... \n");
long start = System.currentTimeMillis();
byte [] mybytearray = new byte [1024];
txtArea.append("Connecting... \n");
output.writeUTF(remoteSelection);
FileOutputStream fos = new FileOutputStream(basePath+"\\"+remoteSelection);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int bytesRead = input.read(mybytearray, 0, mybytearray.length);
while(bytesRead != -1)
{
bos.write(mybytearray, 0, bytesRead);
txtArea.append("got chunk" + bytesRead +"\n");
bytesRead = input.read(mybytearray, 0, mybytearray.length);
}
bos.flush();
書き込みの前に-1をチェックする必要があります。あなたはまた、Javadocで特に警告されている方法でavailable()を誤用しています。あなたはファイルサイズがintに収まると仮定しています。その他など – EJP
EJPが指摘していることに加えて、BufferedInputStreamでも使用可能かどうかチェックしています。基本的な入力ストリームのバッファ長だけを返します。 – dragon66
どうすればファイルのサイズを確認できますか?私はバイト[]を使用しようとするmybytearray =新しいバイト[(int)myFile.length()];前に..しかし、それはエラーを返します。私は大きなファイル.. 600メガバイトを送信しようとするとヒープの外です。 –