📄 bookmark.java
字号:
package com.ismyway.anyview;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Vector;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
/**
* <p>Title: AnyView</p>
*
* <p>Description: E680(I) Reader</p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: www.ismyway.com</p>
*
* @author ZhangJian
* @version 1.0
*/
////////
// BookMark类主要是对应具体文件的书签,一个BookMark类可以有无限个书签
// 但一个BookMark至少得有一个书签项,否则就是不合法的BookMark
//////////
public class BookMark {
private String filename; //文件名
private int fileLength; //文件长度
private Mark[] marks; //所有的书签
private boolean valid = false; //是否是合法的书签
private byte[] bmData = null; //当前BookMark的byte[]形式
private byte[] bmdata = null;
public BookMark() {
}
/**
* 将字节数组转换为BookMark对象
* @param data byte[]
* @return boolean
*/
public boolean decodeBookMark(byte[] data) {
valid = true;
bmData = data;
try {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
filename = dis.readUTF();
fileLength = dis.readInt();
bmdata = new byte[dis.readInt()];
dis.readFully(bmdata);
dis.close();
bais.close();
bais = null;
decodeMark(bmdata);
System.gc();
} catch (IOException ex) {
valid = false;
}
return valid;
}
/**
* 将当前BookMark对象转换为字节数组
* @param filename String
* @param lenght int
* @param marks Mark[]
* @return byte[]
*/
public byte[] write(String filename, int lenght, Mark[] marks) {
byte[] b;
try {
ByteArrayOutputStream baos = new
ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeUTF(filename);
dos.writeInt(lenght);
dos.writeInt(marks.length * 32);
for (int i = 0; i < marks.length; i++) {
dos.write(marks[i].getByte());
//System.out.println(marks[i].getByte().length);
}
b = baos.toByteArray();
dos.close();
baos.close();
} catch (IOException ex) {
b = null;
}
if (b != null) {
bmData = new byte[b.length];
System.arraycopy(b, 0, bmData, 0, b.length);
}
return b;
}
/**
* 将字节数组转换为书签项
* @param data byte[]
*/
private void decodeMark(byte[] data) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
int l = dis.available();
if (l % 32 != 0) {
dis.close();
bais.close();
valid = false;
return;
}
int n = l / 32;
marks = new Mark[n];
for (int i = 0; i < n; i++) {
int ch = dis.readInt();
int off = dis.readInt();
byte[] b = new byte[24];
dis.read(b);
marks[i] = new Mark(ch, off, b);
}
dis.close();
bais.close();
} catch (IOException ex) {
}
}
public String getFilename() {
return this.filename;
}
public int getFileLenght() {
return this.fileLength;
}
public Mark[] getMarks() {
return this.marks;
}
public byte[] getBytes() {
return bmData;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -