⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bookmark.java

📁 anyview手机小说阅览器的开源代码
💻 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 + -