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

📄 bytebuffer.java

📁 一个java操作pdf文件的开发包,很好用的.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * $Id: ByteBuffer.java,v 1.34 2002/06/18 13:59:39 blowagie Exp $ * $Name:  $ * * Copyright 2000, 2001, 2002 by Paulo Soares. * * The contents of this file are subject to the Mozilla Public License Version 1.1 * (the "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the License. * * The Original Code is 'iText, a free JAVA-PDF library'. * * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie. * All Rights Reserved. * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved. * * Contributor(s): all the names of the contributors are added in the source code * where applicable. * * Alternatively, the contents of this file may be used under the terms of the * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the * provisions of LGPL are applicable instead of those above.  If you wish to * allow use of your version of this file only under the terms of the LGPL * License and not to allow others to use your version of this file under * the MPL, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the LGPL. * If you do not delete the provisions above, a recipient may use your version * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. * * This library is free software; you can redistribute it and/or modify it * under the terms of the MPL as stated above or under the terms of the GNU * Library General Public License as published by the Free Software Foundation; * either version 2 of the License, or any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more * details. * * If you didn't download this code from the following link, you should check if * you aren't using an obsolete version: * http://www.lowagie.com/iText/ */package com.lowagie.text.pdf;import java.io.UnsupportedEncodingException;import java.io.OutputStream;import java.io.IOException;import com.lowagie.text.DocWriter;/** * Acts like a <CODE>StringBuffer</CODE> but works with <CODE>byte</CODE> arrays. * Floating point is converted to a format suitable to the PDF. * @author Paulo Soares (psoares@consiste.pt) */public class ByteBuffer {    /** The count of bytes in the buffer. */    protected int count;        /** The buffer where the bytes are stored. */    protected byte buf[];        private static int byteCacheSize = 0;        private static byte[][] byteCache = new byte[byteCacheSize][];    public static byte ZERO = (byte)'0';    private static final char[] chars = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};    private static final byte[] bytes = new byte[] {(byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9'};        /** Creates new ByteBuffer with capacity 128 */    public ByteBuffer() {        this(128);    }        /**     * Creates a byte buffer with a certain capacity.     * @param size the initial capacity     */    public ByteBuffer(int size) {        if (size < 1)            size = 128;        buf = new byte[size];    }        /**     * Sets the cache size.     * <P>     * This can only be used to increment the size.     * If the size that is passed through is smaller than the current size, nothing happens.     *     * @param   size    the size of the cache     */        public static void setCacheSize(int size) {        if (size > 3276700) size = 3276700;        if (size <= byteCacheSize) return;        byte[][] tmpCache = new byte[size][];        for (int i = 0; i < byteCacheSize; i++) {            tmpCache[i] = byteCache[i];        }        byteCache = tmpCache;        byteCacheSize = size;    }        /**     * You can fill the cache in advance if you want to.     *     * @param   decimals     */        public static void fillCache(int decimals) {        int step = 1;        switch(decimals) {            case 0:                step = 100;                break;            case 1:                step = 10;                break;        }        for (int i = 1; i < byteCacheSize; i += step) {            if (byteCache[i] != null) continue;            byteCache[i] = convertToBytes(i);        }    }        /**     * Converts an double (multiplied by 100 and cast to an int) into an array of bytes.     *     * @param   i   the int     * @return  a bytearray     */        private static byte[] convertToBytes(int i) {        int size = (int)Math.floor(Math.log(i) / Math.log(10));        if (i % 100 != 0) {            size += 2;        }        if (i % 10 != 0) {            size++;        }        if (i < 100) {            size++;            if (i < 10) {                size++;            }        }        size--;        byte[] cache = new byte[size];        size --;        if (i < 100) {            cache[0] = (byte)'0';        }        if (i % 10 != 0) {            cache[size--] = bytes[i % 10];        }        if (i % 100 != 0) {            cache[size--] = bytes[(i / 10) % 10];            cache[size--] = (byte)'.';        }        size = (int)Math.floor(Math.log(i) / Math.log(10)) - 1;        int add = 0;        while (add < size) {            cache[add] = bytes[(i / (int)Math.pow(10, size - add + 1)) % 10];            add++;        }        return cache;    }        /**     * Appends an <CODE>int</CODE>. The size of the array will grow by one.     * @param b the int to be appended     * @return a reference to this <CODE>ByteBuffer</CODE> object     */    public ByteBuffer append_i(int b) {        int newcount = count + 1;        if (newcount > buf.length) {            byte newbuf[] = new byte[Math.max(buf.length << 1, newcount)];            System.arraycopy(buf, 0, newbuf, 0, count);            buf = newbuf;        }        buf[count] = (byte)b;        count = newcount;        return this;    }        /**     * Appends the subarray of the <CODE>byte</CODE> array. The buffer will grow by     * <CODE>len</CODE> bytes.     * @param b the array to be appended     * @param off the offset to the start of the array     * @param len the length of bytes to append     * @return a reference to this <CODE>ByteBuffer</CODE> object     */    public ByteBuffer append(byte b[], int off, int len) {        if ((off < 0) || (off > b.length) || (len < 0) ||        ((off + len) > b.length) || ((off + len) < 0) || len == 0)            return this;        int newcount = count + len;        if (newcount > buf.length) {            byte newbuf[] = new byte[Math.max(buf.length << 1, newcount)];            System.arraycopy(buf, 0, newbuf, 0, count);            buf = newbuf;        }        System.arraycopy(b, off, buf, count, len);        count = newcount;        return this;    }        /**     * Appends an array of bytes.     * @param b the array to be appended     * @return a reference to this <CODE>ByteBuffer</CODE> object     */    public ByteBuffer append(byte b[]) {        return append(b, 0, b.length);    }        /**     * Appends a <CODE>String</CODE> to the buffer. The <CODE>String</CODE> is     * converted according to the encoding ISO-8859-1.     * @param str the <CODE>String</CODE> to be appended     * @return a reference to this <CODE>ByteBuffer</CODE> object     */    public ByteBuffer append(String str) {        if (str != null)            return append(DocWriter.getISOBytes(str));        return this;    }        /**     * Appends a <CODE>char</CODE> to the buffer. The <CODE>char</CODE> is     * converted according to the encoding ISO-8859-1.     * @param c the <CODE>char</CODE> to be appended     * @return a reference to this <CODE>ByteBuffer</CODE> object     */    public ByteBuffer append(char c) {        return append_i(c);    }        /**     * Appends another <CODE>ByteBuffer</CODE> to this buffer.     * @param buf the <CODE>ByteBuffer</CODE> to be appended     * @return a reference to this <CODE>ByteBuffer</CODE> object     */    public ByteBuffer append(ByteBuffer buf) {        return append(buf.buf, 0, buf.count);    }        /**     * Appends the string representation of an <CODE>int</CODE>.     * @param i the <CODE>int</CODE> to be appended     * @return a reference to this <CODE>ByteBuffer</CODE> object     */    public ByteBuffer append(int i) {        return append((double)i);    }        public ByteBuffer append(byte b) {        return append_i(b);    }        /**     * Appends a string representation of a <CODE>float</CODE> according     * to the Pdf conventions.     * @param i the <CODE>float</CODE> to be appended     * @return a reference to this <CODE>ByteBuffer</CODE> object     */    public ByteBuffer append(float i) {        return append((double)i);    }        /**     * Appends a string representation of a <CODE>double</CODE> according     * to the Pdf conventions.     * @param d the <CODE>double</CODE> to be appended     * @return a reference to this <CODE>ByteBuffer</CODE> object     */    public ByteBuffer append(double d) {        append(formatDouble(d, this));        return this;    }        /**

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -