📄 enword.java
字号:
package org.zblog.zenghelper.dbtool;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.DataInputStream;
import java.io.ByteArrayInputStream;
import java.util.Vector;
/**
* <br><strong>Z英语学习助手-英文单词类</strong><br>
* <br>该类的对象代表了一个英文单词,该类具有以下属性:
* <br>1.在RMS中的Id编号: int rsId
* <br>2.词语本身: String word
* <br>3.生词表中的Id: int senId
* <br>4.音标属性: String[] ybs
* <br>5.关联的中文词语id的集合: Vector cnRSId
* <br>6.与中文词语id对应的(词性)集合:Vector cnAdj
* <br>7.该类的byte[]格式数据: byte[]bytes
* <br>该类根据RMS中的id,从RMS中获取数据进行实例化.也可以通过store()将对象保存到RMS.
* @author <a href="mailto:zcw@zblog.org">朱传伟</a><br>
* <a href="http://www.zblog.org">www.zblog.org</a></p>
* @version <strong>ZEnHelper</strong> Ver 1.0
*/
public class EnWord {
public int rsId=-1;
public String word=null;
public int senId=-1;
public String[]ybs=null;
public Vector cnRSId=new Vector();
public Vector cnAdj=new Vector();
public byte[]bytes=null;
/**
* 通过RMS中的Id进行构造,实际是为了从数据库中恢复该对象
* @param Id int
*/
public EnWord(int d){
rsId=d;
loadDB();
}
/**
* 传递数据单词word方式构造,该方式一般用在新添加单词时用到,
* 首先检查数据中是否已经存在该单词,有则先从数据库中恢复,
* 然后将新的属性在添加到原有属性中
* @param eWord String
*/
public EnWord(String eWord,WordGroup wg){
word=eWord;
rsId=wg.searchWord(word);
if(rsId!=-1){
loadDB();
}
}
/**
* 修改原有音标为现在的音标
* @param ybss String[]
*/
public void setYbs(Vector ybv){
if(ybv!=null&&ybv.size()>0){
ybs=new String[ybv.size()];
for(int i=0;i<ybv.size();i++){
ybs[i]=(String)ybv.elementAt(i);
}
}
}
public void setSen(int sid){
senId=sid;
}
/**
* 添加cnid关联,程序需屏蔽到相同的
* 如果存在,则更新原有属性
* @param cnids String
*/
public void addCnId(String cnid,String adj){
if(!cnRSId.contains(cnid)){
cnRSId.addElement(cnid);
cnAdj.addElement(adj);
}
else{
cnAdj.setElementAt(adj,cnRSId.indexOf(cnid));
}
}
/**
* 从数据库加载该EnWord对象
*/
public void loadDB(){
DbTool dt=DbTool.getInstance();
formBytes(dt.getRSByte(DbTool.EN_WORD_DB,rsId));
}
/**
* 将单词的属性转换成统一的byte[]格式
* 输出单词word的byte[]格式
* @return byte[]
* @throws IOException
*/
public void toBytes() throws IOException {
try{
ByteArrayOutputStream bos=new ByteArrayOutputStream();
DataOutputStream dos=new DataOutputStream(bos);
//写入word
dos.writeUTF(word);
//写入sen
dos.writeInt(senId);
//写入音标
int ybcount=0;
if(ybs!=null)ybcount=ybs.length;
dos.writeInt(ybcount);
for(int i=0;i<ybcount;i++)
dos.writeUTF(ybs[i]);
//写入关联Cn单词的id
int cncount=cnRSId.size();
dos.writeInt(cncount);
for(int i=0;i<cncount;i++)
dos.writeUTF((String)cnRSId.elementAt(i));
//写入关联Cn单词的id
int adcount=cnAdj.size();
dos.writeInt(adcount);
for(int i=0;i<adcount;i++)
dos.writeUTF((String)cnAdj.elementAt(i));
//转换为byte[]
bytes=bos.toByteArray();
dos.close();
bos.close();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 将byte[]格式还原为EnWord的属性方式
* @param bs byte[]
*/
public void formBytes(byte[]data){
bytes=data;
if(data==null||data.length<=0){
return;
}
try{
ByteArrayInputStream bis = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bis);
//读取word属性
word=dis.readUTF();
//读取sen
senId=dis.readInt();
//读取音标属性
int ybcount = dis.readInt();
ybs=new String[ybcount];
for(int i=0;i<ybcount;i++)
ybs[i]=dis.readUTF();
//读取关联CnId属性
int cncount=dis.readInt();
cnRSId.removeAllElements();
for(int i=0;i<cncount;i++)
cnRSId.addElement(dis.readUTF());
//读取关联CnId属性
int adcount=dis.readInt();
cnAdj.removeAllElements();
for(int i=0;i<adcount;i++)
cnAdj.addElement(dis.readUTF());
dis.close();
bis.close();
}
catch(Exception e){
e.printStackTrace();
}
}
/**
* 保存修改后的CnWord
*/
public void store(){
try{
toBytes();
DbTool dt = DbTool.getInstance();
dt.update(DbTool.EN_WORD_DB, this.bytes, this.rsId);
}
catch(Exception e){e.printStackTrace();}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -