zoukankan      html  css  js  c++  java
  • java.lang.ClassFormatError: Extra bytes at the end of class file

     

    在精简JRE过程中,将rt.jar中类通过FileInputStream,FileOutputStream进行拷贝操作出错:

    java.lang.ClassFormatError: Extra bytes at the end of class file

    源代码:

    Java代码  收藏代码
    1. byte buf[] = new byte[256];  
    2. while(fin.read(buf) != -1)  
    3. {  
    4.     fout.write(buf);  
    5.     ir.read();  
    6. }  
    7. fout.flush();  

    修改后:

    Java代码  收藏代码
    1. byte buf[] = new byte[256];  
    2. int len = 256;  
    3. while((len = fin.read(buf)) != -1)  
    4. {  
    5.     fout.write(buf,0,len);  
    6.     ir.read();  
    7. }  
    8. fout.flush();  

    相关资料:

    java.lang.ClassFormatError thrown when applet runs


    Symptoms

    When running an applet in a browser using the Sun JVM, a ClassFormatError is thrown by theClassLoader. The same applet runs under the Microsoft  VM.

    Cause

    This error is caused by bytecodes generated from old JDK 1.0.2/1.1 compilers, or from a third-party obfuscator. In the past, many of these compilers and obfuscators generated bytecode that does not conform to the Java VM Specification. Because the verifiers in recent J2SE releases are much stricter about bad class format, the ClassFormatError is thrown by the VM when these bad class files are loaded.

    Some typical problems in some older class files are the following (note that this list is not exhaustive):

    • There are extra bytes at the end of the class file.
    • The class file contains method or field names that do not begin with a letter.
    • The class attempts to access private members of another class.
    • The class file has other format errors, including illegal constant pool indices and illegal UTF-8 strings.
    • The class file produced by an early (third-party) bytecode obfuscator violates proper class-file format.

    Resolution

    To allow some of the applets with bad class files to run in the Java 2 platform, Java Plug-in contains a bytecode transformer to transform some of the bad class files to good ones. Currently, only bad class files with the following problems may be transformed:

    • Local variable name with a bad constant pool index
    • Extra bytes at the end of the class file
    • Code segment of the wrong length
    • Illegal field/method name
    • Illegal field/method modifiers
    • Invalid start_pc/length in local var table

    Unfortunately, the bytecode transformer cannot transform the following problems, which will still result in a ClassFormatError:

    • Illegal use of nonvirtual function call
    • Arguments can't fit into locals
    • Unsorted lookup switch
    • Truncated class file

    You can resolve these problems by simply recompiling your Java classes with the javac compiler from the Java 2 SDK. If you choose to use a third-party obfuscator, be sure to use one that produces class files that respect proper class-file format.

    相关资料: http://download.oracle.com/javase/1.4.2/docs/guide/deployment/deployment-guide/upgrade-guide/article-01.html

  • 相关阅读:
    根据W3C总结Ajax基础技术
    MVC中ActionName标记属性的用法
    为什么做网站一般不用服务端控件?
    Jquery两个比较常用的方法each和data
    MVC中的路由
    SQL中获取刚插入记录时对应的自增列的值
    第一个文章,今天比较兴奋啊! 给大家一个关于SQL复合查询的文章(动态生成多个where条件)
    获取 汉字的首字母(例如张三返回zs)核心方法chinesecap()
    ASP.NET中判断密码的安全度(低,中,高)
    C# 关于密码加密 (转载)
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/9115553.html
Copyright © 2011-2022 走看看