質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Q&A

1回答

1659閲覧

[Java] Socket通信のOutputStream.writeの速度について

ARU_Kohei

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

1グッド

2クリップ

投稿2018/10/04 14:45

編集2018/10/04 14:58

JavaでAndroidアプリを作成しています。Socket通信を使ってプレビュー画像をリアルタイムで送信したいです。

Socket.getOutputStream()でOutputStreamを取得しOutputStream.write(byte[] data)で書き込みを行っているのですが、送信速度を上げたいです。
Android端末からUSB接続したPCへの送信に約1.25Mbpsかかっているのですが、より速い方法は無いのでしょうか。

Java初心者ですが、何か情報がございましたら教えて下さい。

また、ストリームとしてOutputStreamBufferedOutputStreamの2つを試したのですが速度はあまり変わりませんでした。
以下、コード内で関係ありそうな部分を抜粋しております。

コード抜粋

java

1 2 private Camera mCamera = null; 3 private byte[] mFrameBuffer; 4 OutputStream outputStream; 5 BufferedOutputStream bfOutputStream; 6 7 //サーバースレッド 8 public void run() { 9 try { 10 listener = new ServerSocket(); 11 listener.setReuseAddress(true); 12 listener.bind(new InetSocketAddress(8079)); 13 clientSocket = listener.accept(); 14 15 outputStream = clientSocket.getOutputStream(); 16 //bfOutputStream = new BufferedOutputStream(outputStream); 17 18 Camera.Parameters params = mCamera.getParameters(); 19 params.setPreviewSize(Width, Height); 20 mCamera.setParameters(params); 21 int size = Width * Height * ImageFormat.getBitsPerPixel(params.getPreviewFormat()) / 8; 22 mFrameBuffer = new byte[size]; 23 mCamera.addCallbackBuffer(mFrameBuffer); 24 mCamera.setPreviewCallbackWithBuffer(previewCallback); 25 mCamera.startPreview(); 26 27 } catch (Exception e) { 28 e.printStackTrace(); 29 } 30 } 31 32 private Camera.PreviewCallback previewCallback = new Camera.PreviewCallback(){ 33 @Override 34 public void onPreviewFrame(byte[] data, Camera camera) { 35 Send(data); 36 mCamera.addCallbackBuffer(mFrameBuffer); 37 } 38 } 39 40 // データ送信 41 private void Send(final byte[] array) { 42 senderHandler.post(new Runnable() { 43 @Override 44 public void run() { 45 try { 46 outputStream.write(array); 47 //bfOutputStream.write(array); 48 } catch (IOException ex) { 49 ex.printStackTrace(); 50 } 51 } 52 }); 53 }
A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Javaのこのメソッドが遅いというよりは、通信自体が遅いのではないでしょうか?
USB3.0でも遅いですか?

速度改善は一般的に、一番遅いところを直していくものです。Java以外にも目を向けたほうが良いです。

投稿2018/10/15 04:57

motisen

総合スコア92

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ARU_Kohei

2018/10/15 09:37

ご回答ありがとうございます。 使用している端末にはMicro-BのUSBしか接続できないので、USB3.0は使用できません。 通信自体が遅いのではとのご指摘ですが、通信速度はどのように計測すれば良いのでしょうか。
motisen

2018/10/16 23:19

すみません。そのの知識は当方持ち合わせておりません。 ただ、Javaを弄り倒して解決できる問題ではなさそうだなと思ってはいます。 ソフトではなく、ハードの問題にみえます。 通信経路をWifi経由などにすれば、また比較ができると思います。 あとはTCP通信ではなくUDP通信にするとかも速度向上が見込まれると思います。 答えを持ち合わせておらず、すみません。
ARU_Kohei

2018/10/18 09:38

コメントありがとうございます。 ハード側の問題も視野に入れてもう少し検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問