我很想知道Java中包名中的最大字符数或最大点数(。)是否有限制?我提到这个oracle doc,但在那里找不到答案。我还提到this thread,这让我怀疑名称限制是否依赖OS(XP,Windows 7)?
先谢谢!!
答案 0 :(得分:4)
不,没有任何明智的意义。 Java不会对包名称施加特定限制。然而,底层系统是另一回事。 Windows上的软件包表示为文件夹,Windows将路径大小限制为260个字符:http://msdn.microsoft.com/en-us/library/aa365247.aspx
从理论上讲,即使我们的系统允许名称中的任意长度,也不可能有一个比计算机最大内存长的名称。
因此Java不限制名称,而是强制JDK实现强加系统限制。
答案 1 :(得分:3)
这种类文件格式在这种情况下有限制。包名称是internal binary name of a class的一个组件。该类的内部二进制名称为stored as a constant in the constant pool。
关于CONSTANT_Class_info:
name_index项的值必须是有效的索引 constant_pool表。该索引处的constant_pool条目必须是a 表示有效二进制文件的 CONSTANT_Utf8_info(§4.4.7)结构 以内部形式编码的类或接口名称(第4.2.1节)。
关于存储在常量池中的个别值,
字段和方法名称,字段和方法描述符的长度, 和 其他常量字符串值 (包括那些引用的那些) ConstantValue(§4.7.2)属性限制为65535个字符 CONSTANT_Utf8_info结构的16位无符号长度项 (§4.4.7)强>
请注意,限制是在编码中的字节数而不是 关于编码字符的数量。 UTF-8编码一些字符 使用两个或三个字节。因此,字符串包含多字节 角色受到进一步限制。
如果CONSTANT_Utf8_info不能超过65535个字节,并且必须包含包名后跟斜杠后跟类名,并且包含一个字符类名,则可以使用长度为65533个字符的包名称。
您可能需要write your own classloader才能加载该类,因为它超出了我所知道的任何文件系统或操作系统的限制。