MongoはBSONを使用しているため、Java APIのBSONDecoderを使用して、MongoクエリからBSONドキュメントを取得し、文字列出力を出力しています。以下では、byte []配列にMongoDBドキュメントのバイトが格納されています(16進値を出力すると、Wiresharkと同じになります)
byte[] array = byteBuffer.array();
BasicBSONDecoder decoder = new BasicBSONDecoder();
BSONObject bsonObject = decoder.readObject(array);
System.out.println(bsonObject.toString());
次のエラーが発生します。
org.bson.BSONException: should be impossible
原因:java.io.IOException:org.bson.BasicBSONDecoder $ BSONInput._need(BasicBSONDecoder.java:327)のorg.bson.BasicBSONDecoder $ BSONInput.read(BasicBSONDecoder.java:364)の予期しないEOF。 BasicBSONDecoder.decodeElement(BasicBSONDecoder.java:118)at org.bson.BasicBSONDecoder._decode(BasicBSONDecoder.java:79)at org.bson.BasicBSONDecoder.decode(BasicBSONDecoder.java:57)at org.bson.BasicBSONDecoder.readObject(BasicBSONDecoder .java:42)org.bson.BasicBSONDecoder.readObject(BasicBSONDecoder.java:32)で...4詳細
実装 https://github.com/mongodb/mongo-java-driver/blob/master/src/main/org/bson/LazyBSONDecoder.javaを見ると、キャッチされているように見えます
throw new BSONException( "should be impossible" , ioe );
上記はデータベースへのクエリで行われます(クエリとは、byte []配列にドキュメントの長さ以降のすべてのバイトが含まれることを意味します)。クエリ自体に文字列「ismaster」が含まれているか、16進数で「x10ismaster x00 x01 x00x00x00x00」です。{isMaster:1}のBSON形式だと思いますが、なぜ失敗するのかまだわかりません。