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

📄 dataentryrewriter.java

📁 ProGuard 是一个免费的 Java类文件的压缩
💻 JAVA
字号:
package proguard.io;import proguard.classfile.*;import java.io.*;/** * This DataEntryReader writes the resource data entries that it reads to a * given DataEntryWriter, updating their contents based on the renamed classes * in the given ClassPool. * * @author Eric Lafortune */public class DataEntryRewriter implements DataEntryReader{    private ClassPool       classPool;    private DataEntryWriter dataEntryWriter;    /**     * Creates a new DataEntryRewriter.     */    public DataEntryRewriter(ClassPool       classPool,                             DataEntryWriter dataEntryWriter)    {        this.classPool       = classPool;        this.dataEntryWriter = dataEntryWriter;    }    // Implementations for DataEntryReader.    public void read(DataEntry dataEntry) throws IOException    {        try        {            // Get the output entry corresponding to this input entry.            OutputStream outputStream = dataEntryWriter.getOutputStream(dataEntry);            if (outputStream != null)            {                InputStream inputStream = dataEntry.getInputStream();                // Copy the data from the input entry to the output entry.                copyData(inputStream, outputStream);                // Close the data entries.                dataEntry.closeInputStream();            }        }        catch (IOException ex)        {            System.err.println("Warning: can't write resource [" + dataEntry.getName() + "] (" + ex.getMessage() + ")");        }    }    // Small utility methods.    /**     * Copies all data that it can read from the given input stream to the     * given output stream.     */    private void copyData(InputStream  inputStream,                          OutputStream outputStream)    throws IOException    {        Reader reader = new BufferedReader(new InputStreamReader(inputStream));        Writer writer = new BufferedWriter(new OutputStreamWriter(outputStream));        StringBuffer word = new StringBuffer();        while (true)        {            int i = reader.read();            if (i < 0)            {                break;            }            // Is the character part of a word?            char c = (char)i;            if (Character.isJavaIdentifierPart(c) ||                c == '.' ||                c == '-')            {                // Collect the characters in this word.                word.append(c);            }            else            {                // Write out the updated word, if any.                writeUpdatedWord(writer, word.toString());                word.setLength(0);                // Write out the character that terminated it.                writer.write(c);            }        }        // Write out the final word.        writeUpdatedWord(writer, word.toString());        writer.flush();        outputStream.flush();    }    /**     * Writes the given word to the given writer, after having adapted it,     * based on the renamed class names.     */    private void writeUpdatedWord(Writer writer, String word)    throws IOException    {        if (word.length() > 0)        {            String newWord = word;            boolean containsDots = word.indexOf('.') >= 0;            // Replace dots by forward slashes.            String className = containsDots ?                word.replace('.', ClassConstants.INTERNAL_PACKAGE_SEPARATOR) :                word;            // Find the class corrsponding to the word.            Clazz clazz = classPool.getClass(className);            if (clazz != null)            {                // Update the word if necessary.                String newClassName = clazz.getName();                if (!className.equals(newClassName))                {                    // Replace forward slashes by dots.                    newWord = containsDots ?                        newClassName.replace(ClassConstants.INTERNAL_PACKAGE_SEPARATOR, '.') :                        newClassName;                }            }            writer.write(newWord);        }    }}

⌨️ 快捷键说明

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