(未完,待修改)
在精简JRE过程中,将rt.jar中类通过FileInputStream,FileOutputStream进行拷贝操作出错:
java.lang.ClassFormatError: Extra bytes at the end of class file
源代码:
byte buf[] = new byte[256];
while(fin.read(buf) != -1)
{
fout.write(buf);
ir.read();
}
fout.flush();
修改后:
byte buf[] = new byte[256];
int len = 256;
while((len = fin.read(buf)) != -1)
{
fout.write(buf,0,len);
ir.read();
}
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 the ClassLoader
. 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
分享到:
相关推荐
在Java开发领域,`java.lang.ClassFormatError: Bad version information`是一个常见的错误,通常发生在尝试加载或执行不兼容的字节码时。这个错误表明Java虚拟机(JVM)遇到了一个它无法识别或者处理的类文件版本。...
在Java编程环境中,"ALERT: java/lang/ClassFormatError: Bad version information."是一个常见的错误提示,这通常意味着你的程序尝试加载一个与当前运行时环境不兼容的类文件。这个错误通常涉及到Java类版本的问题...
10. **java.lang.ClassFormatError**: 表示从类文件读取的数据格式不符合Java类的规范。检查类文件是否损坏或由非Java编译器生成。 11. **java.lang.Error**: Error是所有错误的基类,通常表示严重的问题,如...
14. **java.lang.ClassCircularityError** 和 **java.lang.ClassFormatError**: 这些属于更底层的错误,通常与类加载和类文件格式有关。它们可能是由于类的编译或打包问题导致的。 了解和正确处理这些异常对于编写...
- **`java.lang.ClassFormatError`**:当类文件格式不正确时抛出。 - **`java.lang.OutOfMemoryError`**:当JVM无法申请足够的内存时抛出。 - **`java.lang.StackOverflowError`**:当栈溢出时抛出,通常由无限递归...
12. **java.lang.AbstractMethodError**、**java.lang.AssertionError**、**java.lang.ClassCircularityError**、**java.lang.ClassFormatError**等: 这些是更底层的运行时错误,通常表明程序中存在严重的问题,如...
java.lang.ClassFormatError 是一种类格式错误,指的是在程序中类的格式不正确时抛出的异常。 17. java.lang.Error 错误 java.lang.Error 是一种错误,指的是在程序中出现严重的程序运行问题时抛出的异常。 18. ...
- **`java.lang.ClassFormatError`**:当JVM尝试读取不符合Java类格式的有效文件时抛出。 - **`java.lang.Error`**:表示严重问题,通常不应该被捕获,例如JVM内部错误或资源耗尽。 - **`java.lang....
- **`java.lang.ClassFormatError`**:类文件格式错误时抛出。 - **`java.lang.OutOfMemoryError`**:内存不足时抛出。 - **`java.lang.StackOverflowError`**:栈溢出时抛出。 - **`java.lang....
- **`java.lang.ClassFormatError`**:类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。 - **`java.lang.Error`**:错误基类,用于标识严重的程序运行问题。 -...
### Java异常总结与详解 #### 引言 在Java编程中,异常处理是软件开发过程中不可或缺的一部分。良好的异常处理能够帮助我们及时发现并解决问题,从而提高程序的稳定性和健壮性。本文旨在全面总结Java中常见的异常...
### Java异常详解 #### 1. `java.lang.NullPointerException` `NullPointerException`是当程序尝试访问一个为`null`的对象实例的字段、调用其方法或构造函数时抛出的异常。这种异常通常发生在程序员错误地假设某个...
Java的核心API主要集中在`java.lang`包中,包含了大量常用的基础类,这些类为Java程序提供了基本的操作能力。以下是对`java.lang`包中部分重要类的介绍: 1. **Object**:所有类的基类,提供了一些基本方法如`...
16. **ClassFormatError**:类格式错误,当类文件的格式不符合Java虚拟机规范时抛出。 17. **Error**:错误,表示严重的问题,如虚拟机错误、内存不足或内部错误等,通常不期望程序捕获。 18. **...
16. **类格式错误:ClassFormatError** - 当读取的类文件格式不正确,无法被Java虚拟机识别时,会抛出此异常。 17. **错误:Error** - 表示严重的运行时问题,通常不应该被捕获,而是需要立即终止程序。例如,`...
16. **ClassFormatError** - 类文件格式不正确,Java虚拟机无法解析时,会抛出此错误。 17. **Error** - 是所有错误的基类,表示严重的问题,通常不应由应用程序捕获。 18. **ExceptionInInitializerError** - 在...
4. ClassFormatError:类格式错误,当 Java 虚拟机试图从一个文件中读取 Java 类,而检测到该文件的内容不符合类的有效格式时抛出。 5. Error:错误,是所有错误的基类,用于标识严重的程序运行问题。 6. ...