Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDb Java中的二进制到字符串_Java_Mongodb_Bson - Fatal编程技术网

MongoDb Java中的二进制到字符串

MongoDb Java中的二进制到字符串,java,mongodb,bson,Java,Mongodb,Bson,您好,我正在使用MongoDb数据库,我必须将网站的所有内容以二进制形式放入MongoDb数据库中。现在在servlet部分中,我需要获取id并将bson二进制文件转换为字符串,以便在iFrame中写入。如何使用Java在MongoDb中将二进制文件转换为字符串 JAVA代码。 //Not quite working. public String giveSelected(String id){ MongoClient mongoClient = new MongoCl

您好,我正在使用MongoDb数据库,我必须将网站的所有内容以二进制形式放入MongoDb数据库中。现在在servlet部分中,我需要获取id并将bson二进制文件转换为字符串,以便在iFrame中写入。如何使用Java在MongoDb中将二进制文件转换为字符串

JAVA代码。

    //Not quite working.

    public String giveSelected(String id){
    MongoClient mongoClient = new MongoClient("localhost",27017);
    MongoDatabase database = mongoClient.getDatabase("dbTest");
    MongoCollection<Document> collection = database.getCollection("colTest");
    Document myDoc = collection.find(eq("_id", id)).first();
    String str=myDoc.getString("content");
    return str;
}
//不太好用。
已选择公共字符串(字符串id){
MongoClient MongoClient=新的MongoClient(“本地主机”,27017);
MongoDatabase=mongoClient.getDatabase(“dbTest”);
MongoCollection collection=database.getCollection(“colTest”);
Document myDoc=collection.find(eq(“_id”,id)).first();
String str=myDoc.getString(“内容”);
返回str;
}
JSP调用:

 //str is the String form of needed content Binary.
 <script>
 function iFramefunc(){
 var s = document.getElementById('iframe');
 s.contentDocument.documentElement.innerHTML="<%=str%>";
 s.contentDocument.close();
 }
 </script>
 <iframe id="iframe" onload="iFramefunc()"></iframe>
//str是所需内容二进制的字符串形式。
函数iFramefunc(){
var s=document.getElementById('iframe');
s、 contentDocument.documentElement.innerHTML=“”;
s、 contentDocument.close();
}

您可能还希望压缩内容并存储压缩的二进制数据。下面是一个例子:

private static byte[] compress(String str) throws IOException {
    ByteArrayOutputStream obj = new ByteArrayOutputStream();
    GZIPOutputStream gzip = new GZIPOutputStream(obj);
    gzip.write(str.getBytes("UTF-8"));
    gzip.close();
    byte[] compressedString = obj.toByteArray();
    return compressedString;
}

private static String uncompress(byte[] compressedContent) throws IOException {
    GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(compressedContent));
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(gis, "UTF-8"));
    String line;
    StringBuilder out = new StringBuilder();
    while ((line = bufferedReader.readLine()) != null) {
        out.append(line);
    }  
    return out.toString();
}

private static void readWrite() throws IOException {
    MongoClient mongoClient = new MongoClient("localhost",27017);
    MongoDatabase database = mongoClient.getDatabase("dbTest");
    MongoCollection<Document> collection = database.getCollection("colTest");
    collection.drop();

    // Write
    String str = "aaaaaaaaaaaaaaaaaaaaBBBBBBBBBBBBBBBBBBBBBBBBBBBccccccccccccccccccc";
    byte[] compressedString = compress(str);
    String id = "abc";
    Document doc = new Document("content", compressedString).append("_id", id);
    collection.insertOne(doc);

    // Read
    Document myDoc = collection.find(eq("_id", id)).first();
    byte[] compressedContent = ((Binary)myDoc.get("content")).getData();
    String content = uncompress(compressedContent);
    System.out.println(content);
}
私有静态字节[]压缩(字符串str)引发IOException{
ByteArrayOutputStream obj=新建ByteArrayOutputStream();
GZIPOutputStream gzip=新的GZIPOutputStream(obj);
写入(str.getBytes(“UTF-8”);
gzip.close();
字节[]压缩字符串=obj.toByteArray();
回压;
}
私有静态字符串解压缩(字节[]compressedContent)引发IOException{
GZIPInputStream gis=新的GZIPInputStream(新的ByteArrayInputStream(压缩内容));
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(gis,“UTF-8”));
弦线;
StringBuilder out=新的StringBuilder();
而((line=bufferedReader.readLine())!=null){
out.追加(行);
}  
return out.toString();
}
私有静态void readWrite()引发IOException{
MongoClient MongoClient=新的MongoClient(“本地主机”,27017);
MongoDatabase=mongoClient.getDatabase(“dbTest”);
MongoCollection collection=database.getCollection(“colTest”);
collection.drop();
//写
String str=“aaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc;
字节[]compressedString=compress(str);
字符串id=“abc”;
文档文档=新文档(“内容”,压缩字符串)。追加(“\u id”,id);
托收。插入通(doc);
//阅读
Document myDoc=collection.find(eq(“_id”,id)).first();
字节[]压缩内容=((二进制)myDoc.get(“内容”)).getData();
字符串内容=解压缩(压缩内容);
系统输出打印项次(内容);
}

这主要取决于创建网站二进制表示形式的代码。那么,这部分是如何工作的呢?你为什么不把它倒过来?顺便说一句,这听起来像是一种“有趣”的方法,将网站作为blob存储在数据库中。二进制在MongoDb中存储的数据较少,它会自动将它们存储在另一个程序中。我所需要的只是将它们作为二进制对象,并将其更改为字符串。不过:本质是在另一个程序中自动获取它们。。。该过程定义了数据库的内容。当你不理解它的时候,你不能逆转这个操作。也许有base64编码,也许有压缩,谁知道呢。