gpt4 book ai didi

java - 压缩 java 字符串(url)

转载 作者:行者123 更新时间:2023-11-30 05:53:50 25 4
gpt4 key购买 nike

我有很多网址要处理。我将其中大约 20'000'000 个存储在哈希集中。这会造成一些内存问题。

我尝试创建一个压缩字符串类:

import java.io.*;//file writer
import java.util.*;
import java.util.zip.*;

class CompressedString2 implements Serializable{
private int originalSize;
private byte[] cstring;



public CompressedString2 (){
compress("");
}


public CompressedString2 (String string){
compress(string);
}


public void compress(String str){
try {
byte[] bytes = str.getBytes("UTF-8");
originalSize = bytes.length;

ByteArrayOutputStream deflatedBytes = new ByteArrayOutputStream();
DeflaterOutputStream dos = new DeflaterOutputStream(deflatedBytes,new Deflater(Deflater.DEFAULT_COMPRESSION));
dos.write(bytes);
dos.finish();
cstring=deflatedBytes.toByteArray();
}catch(Exception e){e.printStackTrace();}

}


public String decompress() throws Exception{
String result="";
try{
ByteArrayOutputStream deflatedBytes=new ByteArrayOutputStream();
deflatedBytes.write(cstring);
deflatedBytes.close();


InflaterInputStream iis = new InflaterInputStream(new ByteArrayInputStream(deflatedBytes.toByteArray()));
byte[] inflatedBytes = new byte[originalSize];
iis.read(inflatedBytes);
result= new String(inflatedBytes, "UTF-8");
}catch(Exception e){e.printStackTrace();}
return result;
}
}

但实际上当我用这样的东西存储它们时:

HashSet<String> urlStr=new HashSet<String>();
HashSet<CompressedString> urlComp=new HashSet<CompressedString>();


String filePath=new String();

filePath=args[0];

int num=0;

try{
BufferedReader br = new BufferedReader(new FileReader(filePath));

String line = br.readLine();
while (line != null) {

num++;
urlStr.add(line);
urlComp.add(new CompressedString(line));

line = br.readLine();
}
} catch(Exception e){
System.out.println("fehler..:");
e.printStackTrace();
}

ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("testDeflator_rawurls.obj"));
oos1.writeObject(urlStr);
ObjectOutputStream oos4 = new ObjectOutputStream(new FileOutputStream("testDeflator_compressed2.obj"));
oos4.writeObject(urlComp);

“压缩”的 url 甚至更大...

有人知道如何成功压缩 url 吗?

最佳答案

好吧,如果它们在一个集合中,那么您所能做的就是添加/删除/查找。您也可以在“字符林”上执行这些操作,它可能是一个更紧凑的表示。我在想一棵节点树,每个节点都有一个字符,彼此链接。森林的根将包含“h”、“f”等等。在“h”节点下是一个“t”节点,然后是另一个“t”节点,然后是“p”节点,等等。“f”节点将有“t”和“i”子节点。最终这棵树会分枝,但在树根附近可能会有很多共享。然后,您只需在森林中走走,看看那里是否有 URL。

我想一个节点需要一个 boolean 值成员来指示集合中的一个 URL 在那里终止,一个成员来保存字符,以及一个指向其他节点的链接数组。

关于java - 压缩 java 字符串(url),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10141501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com