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

📄 lzw4hdgf.java

📁 java 读写word excel ppt
💻 JAVA
字号:
/* ====================================================================   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; version 3 of the License.      This program 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 General Public License for more details.==================================================================== */package org.apache.poi.hdgf;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;/** * A decoder for the crazy LZW implementation used *  in Visio. * This is a port of vsd_inflate.c from vsdump *  (http://www.gnome.ru/projects/vsdump_en.html) */public class LZW4HDGF {public byte fromInt(int b) {	if(b < 128) return (byte)b;	return (byte)(b - 256);}public byte[] decode(InputStream src) throws IOException {	ByteArrayOutputStream res = new ByteArrayOutputStream();	int pos = 0;	int flag;	byte[] buffer = new byte[4096];	buffer[0] = 0;		byte data;	int tmp;	int addr1, addr2; 	int len, pntr;	while ( (flag = src.read()) != -1 ) {		for (int mask = 1; mask < 0x100 ; mask <<= 1) {			if ( (flag & mask) > 0) {				if( (tmp = src.read()) != -1) {					buffer[(pos&4095)] = fromInt(tmp);					pos++;					res.write( new byte[] {fromInt(tmp)} );				}			} else {				tmp = src.read();				if(tmp == -1) break;				addr1 = tmp;                                                            				tmp = src.read();				if(tmp == -1) break;				addr2 = tmp;								len = (addr2 & 15) + 3;				pntr = (addr2 & 240)*16 + addr1;                				if(pntr > 4078) {					pntr = pntr - 4078;				} else {					pntr = pntr + 18;				}								for(int i=0; i<len; i++) {					buffer [(pos + i) & 4095] = buffer [(pntr + i) & 4095];					data = buffer[(pntr + i ) & 4095];					res.write(new byte[] {data});				}                                    				pos = pos + len;			}		}    }    return res.toByteArray();}}

⌨️ 快捷键说明

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