private static byte[] loadFile(String file) throws IOException
{
// save data to binary stream
ByteArrayOutputStream byteStream = null;
// read file to stream
InputStream in = null;
// binary data which get from file
byte[] data = null;
try
{
byteStream = new ByteArrayOutputStream();
if (mIdxFile.equals(file))
{
in = new BufferedInputStream(new FileInputStream(file));
}
else
{
in = new GZIPInputStream(new FileInputStream(file));
}
byte[] buf = new byte[1024];
int numRead = 0;
while((numRead = in.read(buf)) != -1)
{
byteStream.write(buf, 0, numRead);
}
data = byteStream.toByteArray();
}
finally
{
in.close();
byteStream.close();
}
return data;
}
/*
* index file structure
* word + '\0' (1 byte) + data offset in dict file (4 bytes) + data size in dict file (4 bytes)
*
* */
private static List<StarDictWord> loadDictIndex() throws IOException
{
List<StarDictWord> words = new ArrayList<StarDictWord>();
byte[] splitByte = SPLIT_CHAR.getBytes();
int currentIndex = 0;
int dataIndex = 0;
byte[] data = loadFile(mIdxFile);
int dataLength = data.length;
while (currentIndex < dataLength)
{
// search for '\0'
if (data[currentIndex] == splitByte[0])
{
// 4 bytes for data offset and 4 bytes for data size in dict file
if (currentIndex + 8 < dataLength)
{
// data size in index file
int dataSize = currentIndex - dataIndex;
StarDictWord word = new StarDictWord();
byte[] wordData = new byte[dataSize];
for (int i = 0; i < dataSize; i++)
{
wordData[i] = data[i + dataIndex];
}
byte[] dataOffsetByte = new byte[4];
byte[] dataSizeByte = new byte[4];
for (int i = 1; i < 4; i++)
{
dataOffsetByte[i] = data[currentIndex + i + 1];
dataSizeByte[i] = data[currentIndex + i + 5];
}
try
{
String content = new String(wordData, "utf-8");
word.setContent(content);
word.setDictName(mDictName);
word.setDictFileOffset(ByteBuffer.wrap(dataOffsetByte).getInt());
word.setDictFileSize(ByteBuffer.wrap(dataSizeByte).getInt());
words.add(word);
}
catch (Exception e)
{
logger.severe("error in " + dataIndex);
}
}
currentIndex += 8;
// reset data index
dataIndex = currentIndex + 1;
}
currentIndex += 1;
}
return words;
}
private static void loadDictData(List<StarDictWord> words) throws IOException
{
// skip for empty list
if (words.size() == 0)
{
return;
}
byte[] data = loadFile(mDictFile);
int dataLength = data.length;
int offset = 0;
int size = 0;
for(StarDictWord word : words)
{
offset = word.getDictFileOffset();
size = word.getDictFileSize();
if (offset + size - 1 < dataLength)
{
byte[] wordData = new byte[size];
for (int i = 0; i < size; i++)
{
wordData[i] = data[i + offset];
}
loadWordData(word, wordData);
}
}
}
分享到:
- 2009-03-17 14:23
- 浏览 724
- 评论(0)
- 论坛回复 / 浏览 (0 / 1468)
- 查看更多
相关推荐
包括:stardict-cdict-gb-2.4.2.tar.bz2,stardict-kdic-computer-gb-2.4.2.tar.bz2,stardict-kdic-ec-11w-2.4.2.tar.bz2,stardict-oxford-gb-2.4.2.tar.bz2,stardict-xdict-ce-gb-2.4.2.tar.bz2,stardict-sun_...
《常用stardict字典详解》 在信息技术领域,词汇量的积累对于学习和工作至关重要。stardict,作为一款开源、跨平台的词典软件,因其高效、便捷的特性,受到了众多用户的喜爱。本文将深入探讨stardict及其常用的词典...
StarDict星际译王是一款强大的多语种词典软件,它以其高效、开源和全面的特点深受广大用户喜爱。这款软件提供了丰富的词库支持,包括不同领域的专业词汇,使得学习者和专业人士能够快速查找和理解各种词汇的含义。在...
《stardict 词典资源详解与应用指南》 Stardict 是一款开源、免费的多平台词典软件,以其高效、便捷的查词功能深受用户喜爱。它支持多种语言的词典,允许用户自定义词典库,极大地扩展了其使用范围。本篇文章将深入...
在Linux操作系统中,Stardict是一款非常受欢迎的免费开源词典软件,它提供了丰富的词典资源和高效快捷的查询功能。本篇将详细讲解如何安装和使用"stardict的牛津辞典安装包",以及相关的重要知识点。 首先,我们要...
《星际译王(Stardict)3.0 for Windows:高效便捷的多语种词典软件》 星际译王(Stardict)是一款开源、免费的多语种词典软件,以其强大的功能和用户友好的界面深受全球用户的喜爱。本文将深入探讨其最新版本——...
stardict词库
《stardict词库:开启英汉互译与牛津大辞典的高效学习之路》 stardict,一个开源的、跨平台的词典软件,因其强大的功能和丰富的词库资源,在全球范围内广受用户喜爱。这个名为“stardict词库.7z”的压缩包,便是为...
stardict-3.03 source code
ubuntu下安装stardict(星际译王): sudo apt install stardict sudo apt install stardict-gtk 然后下载解压本zip包,再将其中各个bz2文件解压放置到适当共享路径上: tar -jxf stardict-xxx.tar.bz2 sudo mv ...
1:sudo apt-get install stardict 2:全部解压到temp文件夹中 3:sudo mv temp/* /usr/share/stardict/dic 3:重启星际译王 包含的词库zh_CN 简体中文词典.html中所有汉语+英汉词库 cdict-gb dictionary(en - zh_...
stardict词典 stardict-21shijishuangxiangcidian-2.4.2.tar.bz2
stardict 词库stardict-ProECCE-2.4.2/ stardict-langdao-ce-gb-2.4.2/ stardict-langdao-ec-gb-2.4.2/ stardict-lazyworm-ce-2.4.2/ stardict-lazyworm-ec-2.4.2/ stardict-oxford-gb-formated-2.4.2/ stardict-...
星际译王(Stardict)是一款开源的、跨平台的词典软件,因其高效、功能丰富和用户友好而广受欢迎。这款字典软件支持多种语言的互译,其中包括汉英词典。在提供的压缩包“stardict-langdao-ce-gb-2[1].4.2”中,包含...
星际译王Stardict词库星际译王Stardict词库星际译王Stardict词库
《stardict dict.zip》是一款集成了多种语言资源的压缩包,主要面向英语与汉语的学习者,特别适合在Linux系统中使用。其中包含了多种类型的词典,如朗文词典、21世纪英汉双解词典以及汉语成语词典等,提供了丰富的...
《StarDict for Linux:一款强大的开源词典软件》 在Linux操作系统中,寻找一款功能强大、易用且完全免费的词典软件并非易事,但StarDict无疑满足了这一需求。StarDict是一款专为Linux设计的开源词典软件,以其丰富...
星际译王(Stardict)是一款开源的、跨平台的词典软件,因其高效、功能强大而受到广大用户的喜爱。标题中的"stardict字典-oxford"指的是这款软件中的一款词典资源,即牛津词典。牛津词典是世界上最权威的英语词典之...