- ベストアンサー
ファイルサイズの転送
javaのファイルサイズの転送で困っています。 最初にファイルサイズを転送し、あらかじめ受信サイズを知らせておきたいのですが。。。うまくいきません。 送信側では最初にファイルサイズ4バイト(intサイズ)送信し、サイズを書き込む。 受信側では4バイト読み込み、ファイルサイズ分のバッファを用意する。 どうすれば出来るでしょうか。おねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
WEB? HTML(もしくはJSP)から<input type="text">にファイルサイズを入力して、submitして、Servletでその値を取得するってことですか? それとも、<input type="file">にファイル名を入力して、submitして、Servletでファイルからファイルサイズを取得するってことですか? ファイルのアップロードでしたら、検索すれば参考になるものがたくさん見つかりますよ。 ↓ http://www.google.co.jp/search?hl=ja&q=java+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89&lr= とりあえず、どういう状況で何がどううまくいかないのか不明点が多すぎます。 補足をお願いします。
その他の回答 (2)
- redasurc
- ベストアンサー率37% (3/8)
いくつかの実装方法がありますが。。。 以下に送受信のコードの例を示します。 (1~10までの数値を送信し、受信側で表示する。) ソケットの作成はできているということなので、データの送受信の部分のみ書いておきます。 sizeが送受信されるデータのサイズ、dataが実際に送受信されるデータです。 実際に使用する場合はsizeやdataを適切に操作してください。 // 送信側 // Socket socket をここまでに作成しておく // これを使用するメソッドはIOExceptionをスローするようにしておく。 DataOutputStream out; try { out = new DataOutputStream(socket.getOutputStream()); } catch (IOException ex) { throw ex; } int size = 10; byte[] data = new byte[size]; for (int i = 0; i < data.length; i++) data[i] = (byte)i; out.writeInt(size); out.write(data); out.flush(); // 受信側 // Socket socket をここまでに作成しておく // これを使用するメソッドはIOExceptionをスローするようにしておく。 DataInputStream in; try { in = new DataInputStream(socket.getInputStream()); } catch (IOException ex) { throw ex; } try { int size = in.readInt(); System.out.println("Data size: " + size); byte[] data = new byte[size]; in.read(data); for (int i = 0; i < data.length; i++) System.out.print(", " + data[i]); } catch (IOException ex) { throw ex; }
- pcbeginner
- ベストアンサー率46% (261/560)
参考URLに書いてあるようなことですか? やったことないので、あまりお力になれず申し訳ありませんが、 送信側から受信側に送るデータの「最初の4バイト」はファイルサイズ と決めて、最初の4バイトを読み込んで、それからその後を読み込めば良いのではないでしょうか。
お礼
回答ありがとうございます! 参照していただいたURLはJAVAで、ソケットプログラムの作り方ですね。 だけど、ソケットプログラムはすでに作っていますので… でも参考になりました!
補足
回答1の補足に書いたCのコードを、そのままJavaコードに落とすことが出来ないでしょうか。 このようなことをしたい理由は、Javaプログラムとphpプログラム間でソケット通信を行いたいからでして。 byte転送なら確実かと思って質問しました。
お礼
回答ありがとうございます! 補足しました。 Cで例を書きましたが、 お分かりになるならご教授ください。
補足
ソケット通信です。 サーブレット、HTMLは関係ないです。 C言語だと、以下のようなことをしたいのです。 行いたい部分だけ書きます。 --- 書き込み側 int file_size = 1024; write(fd, (const void *)&file_size, sizeof(int)); 読み込み側 int file_size; read(fd, (void*)&file_size, sizeof(int)); --- Javaではどうすれば出来るでしょうか。 おねがいします。