那是你选中的文件内容字符编码与jvm缺省的文件编码不一致,如unix下jvm缺省文件编码一般为iso8859-1,而你的文件内容可能使用了GBK,可使用如下代码:
FileInputStream fis = new FileInputStream(Abs);
InputStreamReader isr = new InputStreamReader(fis, "GBK"); //GBK替换成你文件内容使用的编码
BufferedReader br = new BufferedReader(isr);
获取你的JVM系统环境属性 Java的 Writer once run anywhere 口号的确让我们领略到了Java的神奇 也成为SUN宣传Java的金字招牌 拂开这层神秘的面纱 我们不难发现其核心是运行在各种 *** 作系统中的JVM(Java虚拟机)在发挥着重要的作用 Java虚拟机允许我们的纯java类可以达到 一次编写 到处运行 每个安装在不同 *** 作系统的Java虚拟机负责著Java程序与 *** 作系统之间的工作 因此每个Java虚拟机的系统环境属性是不同的 我们可以通过访问Java虚拟机的系统属性来获知一些关于当前 *** 作系统的一些基本信息 这些信息的价值有时是非常重要的 标准SDK中提供了java lang System类 这个类定义了一个对系统设备(包括系统属性和系统输入输出数据流)的 与平台无关的接口 方法getProperties()返回一个java util Property对象 对象中存放了JVM的系统属性列表 我们可以通过这个列表来得到java虚拟机的一些系统属性 下面的例子中 将介绍如何实现获取JVM系统属性的功能 类设计 设计SystemInfo类 用来获取系统的属性 并打印输出到标准输出 首先我们将设计一个getSystemProperty()方法 该方法将调用java lang System getProperties()返回一个系统属性列表 在main()函数中 将系统属性的关键字和属性描述放到一个Hashtable结构中 通过遍历这个结构 获取系统属性值 类结构图如下 //package java;import java lang System;import java util Properties;import java util Hashtable;import java util Enumeration;public class SystemInfo{//存放JVM获得的系统属性static private Properties _property; //Main functionpublic static void main(String[] args){getSystemProperty();Hashtable hashKey;hashKey=new Hashtable();//将系统信息的关键字和标题放到hashtablehashKey put( java home Java安装目录 );hashKey put( java class path 装载类的路径 );hashKey put( java specification version Java API 规范的版本 );hashKey put( java specification vendor Java API 规范的厂商 );hashKey put( java specification name Java API 规范的名称 );hashKey put( java version Java API 实现的版本 );hashKey put( java vendor Java API 实现的厂商 );hashKey put( java vendor url Java API 规范厂商的URL );hashKey put( java vm specification version Java虚拟机规范的版本 );hashKey put( java vm specification vendor Java虚拟机规范的厂商 );hashKey put( java vm specification name Java虚拟机规范的名称 );hashKey put( java vm version Java虚拟机实现的版本 );hashKey put( java vm vendor Java虚拟机实现的厂商 );hashKey put( java vm name Java虚拟机实现的名称 );hashKey put( java class version Java类文件格式的版本 );hashKey put( os name 主机 *** 作系统的名称 );hashKey put( os arch 主机 *** 作系统的体系结构 );hashKey put( os version 主机 *** 作系统的版本 );hashKey put( file separator 平台目录的分隔符 );hashKey put( path separator 平台路径的分隔符 );hashKey put( line separator 平台文本行的分隔符 );hashKey put( user name 当前用户的帐户名称 );hashKey put( user home 当前用户的根目录 );hashKey put( user dir 当前工作目录 );Enumeration enum;String propertyKey;enum=hashKey keys();while(enum hasMoreElements()){propertyKey=(String)enum nextElement(); System out println((String)hashKey get(propertyKey)+ : +_property getProperty(propertyKey));}}/ 获得系统属性列表 @return Properties/static public Properties getSystemProperty(){_property=System getProperties();return _property;}}运行结果 lishixinzhi/Article/program/Java/hx/201311/25847
《揭秘Java虚拟机:JVM设计原理与实现》是2017年电子工业出版社出版的图书,作者是封亚飞。
基本介绍 书名 :揭秘Java虚拟机:JVM设计原理与实现 作者 :封亚飞 ISBN :9787121315411 页数 :700 出版时间 :2017-06 开本 :16开 千 字 数 :942 内容简介,目录, 内容简介 《揭秘Java虚拟机:JVM设计原理与实现》从源码角度解读HotSpot的内部实现机制,本书主要包含三大部分——JVM数据结构设计与实现、执行引擎机制及记忆体分配模型。 数据结构部分包括Java位元组码档案格式、常量池解析、栏位解析、方法解析。每一部分都给出详细的源码实现分析,例如栏位解析一章,从源码层面详细分析了Java栏位重排、栏位继承等关键机制。再如方法解析一章,给出了Java多态特性在源码层面的实现方式。《揭秘Java虚拟机:JVM设计原理与实现》通过直接对原始码的分析,从根本上梳理和澄清Java领域中的关键概念和机制。 执行引擎部分包括Java方法调用机制、栈帧创建机制、指令集架构与解释器实现机制。这一话题是《揭秘Java虚拟机:JVM设计原理与实现》技术含量高的部分,需要读者具备一定的汇编基础。不过千万不要被“汇编”这个词给吓著,其实在作者看来,汇编相比于高级语言而言,语法非常简单,语义也十分清晰。执行引擎部分重点描述Java原始码如何转换为位元组码,又如何从位元组码转换为机器指令从而能够被物理CPU所执行的技术实现。同时详细分析了Java函式堆叠的创建全过程,在源码分析的过程中,带领读者从本质上理解到底什么是Java函式堆叠和栈帧,以及栈帧内部的详细结构。 记忆体分配部分主要包括类型创建与载入、对象实例创建与记忆体分配,例如new关键字的工作机制,import关键字的作用,再如javalangClassLoaderloadClass()接口的本地实现机制。 《揭秘Java虚拟机:JVM设计原理与实现》并不是简单地分析源码实现,而是在描述HotSpot内部实现机制的同时,分析了HotSpot如此这般实现的技术必然性。读者在阅读《揭秘Java虚拟机:JVM设计原理与实现》的过程中,将会在很多地方看到作者本人的这种思考。 目录 第1章 Java虚拟机概述 1 11 从机器语言到Java——詹爷,你好 1 12 兼容的选择:一场生产力的革命 6 13 中间语言翻译 10 131 从中间语言翻译到机器码 11 132 通过C程式翻译 11 133 直接翻译为机器码 13 134 本地编译 16 14 神奇的指令 18 141 常见汇编指令 20 142 JVM指令 21 15 本章总结 24 第2章 Java执行引擎工作原理:方法调用 25 21 方法调用 26 211 真实的机器调用 26 212 C语言函式调用 41 22 JVM的函式调用机制 47 23 函式指针 53 24 CallStub函式指针定义 60 25 _call_stub_entry例程 72 26 本章总结 115 第3章 Java数据结构与面向对象 117 31 从Java算法到数据结构 118 32 数据类型简史 122 33 Java数据结构之偶然性 129 34 Java类型识别 132 341 class位元组码概述 133 342 魔数与JVM内部的int类型 136 343 常量池与JVM内部对象模型 137 35 大端与小端 143 351 大端和小端的概念 146 352 大小端产生的本质原因 148 353 大小端验证 149 354 大端和小端产生的场景 151 355 如何解决位元组序反转 154 356 大小端问题的避免 156 357 JVM对位元组码档案的大小端处理 156 36 本章总结 159 第4章 Java位元组码实战 161 41 位元组码格式初探 161 411 准备测试用例 162 412 使用javap命令分析位元组码档案 162 413 查看位元组码二进制 165 42 魔数与版本 166 421 魔数 168 422 版本号 168 43 常量池 169 431 常量池的基本结构 169 432 JVM所定义的11种常量 170 433 常量池元素的复合结构 170 434 常量池的结束位置 172 435 常量池元素总数量 172 436 第一个常量池元素 173 437 第二个常量池元素 174 438 父类常量 174 439 变数型常量池元素 175 44 访问标识与继承信息 177 441 aess_flags 177 442 this_class 178 443 super_class 179 444 interface 179 45 栏位信息 180 451 fields_count 180 452 field_info fields[fields_count] 181 46 方法信息 185 461 methods_count 185 462 method_info methods[methods_count] 185 47 本章回顾 205 第5章 常量池解析 206 51 常量池记忆体分配 208 511 常量池记忆体分配总体链路 209 512 记忆体分配 215 513 初始化记忆体 223 52 oop-klass模型 224 521 两模型三维度 225 522 体系总览 227 523 oop体系 229 524 klass体系 231 525 handle体系 234 526 oop、klass、handle的相互转换 239 53 常量池klass模型(1) 244 531 klassKlass实例构建总链路 246 532 为klassOop申请记忆体 249 533 klassOop记忆体清零 253 534 初始化mark 253 535 初始化klassOop_metadata 258 536 初始化klass 259 537 自指 260 54 常量池klass模型(2) 261 541 constantPoolKlass模型构建 261 542 constantPoolOop与klass 264 543 klassKlass终结符 267 55 常量池解析 267 551 constantPoolOop域初始化 268 552 初始化tag 269 553 解析常量池元素 271 56 本章总结 279 第6章 类变数解析 280 61 类变数解析 281 62 偏移量 285 621 静态变数偏移量 285 622 非静态变数偏移量 287 623 Java栏位记忆体分配总结 312 63 从源码看栏位继承 319 631 栏位重排与补白 319 632 private栏位可被继承吗 325 633 使用HSDB验证栏位分配与继承 329 634 引用类型变数记忆体分配 338 64 本章总结 342 第7章 Java栈帧 344 71 entry_point例程生成 345 72 局部变数表创建 352 721 constMethod的记忆体布局 352 722 局部变数表空间计算 356 723 初始化局部变数区 359 73 堆叠与栈帧 368 731 栈帧是什么 368 732 硬体对堆叠的支持 387 733 栈帧开辟与回收 390 734 堆叠大小与多执行绪 391 74 JVM的栈帧 396 741 JVM栈帧与大小确定 396 742 栈帧创建 399 743 局部变数表 421 75 栈帧深度与slot复用 433 76 最大运算元栈与运算元栈复用 436 77 本章总结 439 第8章 类方法解析 440 81 方法签名解析与校验 445 82 方法属性解析 447 821 code属性解析 447 822 LVT&LVTT 449 83 创建methodOop 455 84 Java方法属性复制 459 85 与 461 86 查看运行时位元组码指令 482 87 vtable 489 871 多态 489 872 C++中的多态与vtable 491 873 Java中的多态实现机制 493 874 vtable与invokevirtual指令 500 875 HSDB查看运行时vtable 502 876 miranda方法 505 877 vtable特点总结 508 878 vtable机制逻辑验证 509 88 本章总结 511 第9章 执行引擎 513 91 执行引擎概述 514 92 取指 516 921 指令长度 519 922 JVM的两级取指机制 527 923 取指指令放在哪 532 924 程式计数器在哪里 534 93 解码 535 931 模板表 535 932 汇编器 540 933 汇编 549 94 栈顶快取 558 95 栈式指令集 565 96 运算元栈在哪里 576 97 栈帧重叠 581 98 entry_point例程机器指令 586 99 执行引擎实战 588 991 一个简单的例子 588 992 位元组码运行过程分析 590 910 位元组码指令实现 597 9101 iconst_3 598 9102 istore_0 599 9103 iadd 600 911 本章总结 601 第10章 类的生命周期 602 101 类的生命周期概述 602 102 类载入 605 1021 类载入——镜像类与静态栏位 611 1022 Java主类载入机制 617 1023 类载入器的载入机制 622 1024 反射载入机制 623 1025 import与new指令 624 103 类的初始化 625 104 类载入器 628 1041 类载入器的定义 628 1042 系统类载入器与扩展类载入器创建 634 1043 双亲委派机制与破坏 636 1044 预载入 638 1045 引导类载入 640 1046 载入、连结与延迟载入 641 1047 父载入器 645 1048 载入器与类型转换 648 105 类实例分配 649 1051 栈上分配与逃逸分析 652 1052 TLAB 655 1053 指针碰撞与eden区分配 657 1054 清零 658 1055 偏向锁 658 1056 压栈与取指 659 106 本章总结 661
以上就是关于java读取文件乱码全部的内容,包括:java读取文件乱码、获取运行中的JVM系统属性、揭秘Java虚拟机:JVM设计原理与实现详细资料大全等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)