Glassfish4(Tyrus)のJava API for WebSocket(JSR-356)で、サーバからクライアントへサイズの大きなファイルをバイナリ転送するサンプルプログラムを作ってみました。 JSR-356でバイナリデータを転送する場合、byte[]やByteBufferなど固定長のデータを使う方法と、InputStream/OutputStreamといったStreamを使う方法の2種類があります。これらの組み合わせによっては、動きそうで実は正しく動かないことがあります。 ダメだった実装 先にダメだったほうの実装から書きます。 クライアント java.io.InputStreamでバイナリメッセージを受けて、適当にファイルに保存するようにしました。 import java.io.IOException; import java.io.InputStream; import ja