2

Web ソケットを使用して BLOB データを Java サーバーに渡したい。私のJavaサーバーは次のとおりです。

providerSocket = new ServerSocket(2007, 10);
System.out.println("Waiting for connection");
connection = providerSocket.accept();
System.out.println("Connection received from " + connection.getInetAddress().getHostName());
out = new ObjectOutputStream(connection.getOutputStream());
out.flush();
in = new ObjectInputStream(connection.getInputStream());
sendMessage("Connection successful");

そして、私のJavaScriptクライアントは次のとおりです。

var ws = new WebSocket("ws://127.0.0.1:2007");
ws.binaryType = "blob";
ws.onopen = function () { console.log("Openened connection to websocket"); };

ws.onmessage = function(e) {
    console.log(e.data);
};

function doneEncoding( blob ) { // blob is audio blob
    ws.send(blob);
}

エラー: サーバー内

Connection received from 127.0.0.1
java.io.StreamCorruptedException: invalid stream header: 47455420
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at server.Provider.run(Provider.java:21)
    at server.Provider.main(Provider.java:67)
Exception in thread "main" java.lang.NullPointerException
    at server.Provider.run(Provider.java:43)
    at server.Provider.main(Provider.java:67)

なにが問題ですか?助けて。ありがとうございました。

4

1 に答える 1

4

ObjectInputStreamのドキュメントには次のように書かれています。

ObjectInputStreamは、ObjectOutputStream を使用して以前に書き込まれたプリミティブ データとオブジェクトを逆シリアル化します...

JavaScript プログラムから送信しようとしているランダムな BLOB は、「以前に ObjectOutputStream を使用して書き込まれたプリミティブ データおよびオブジェクト」とは見なされないため、BLOB で何をしようとしてもうまくいきません。

何をしたいかは、最終的には BLOB を何に使用するかによって異なりますが、次のようにバイト配列または類似のものに読み込むことができます。

InputStream in = connection.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int n;
for (n = in.read(buffer); 0 < n; n = in.read(buffer))
{
    out.write(buffer, 0, n);
}
out.flush();
byte[] blob = out.toByteArray();
于 2013-05-08T18:51:03.153 に答える