首页
关于
留言
归档
动态
友链
推荐
虫洞
开往
憶夣
累计撰写
57
篇文章
累计创建
11
个标签
累计收到
2
条评论
栏目
首页
关于
留言
归档
动态
友链
推荐
虫洞
开往
目 录
CONTENT
Java核心技术卷II-憶夣
以下是
Java核心技术卷II
相关的文章
2023-04-04
12、本地方法
## 摘要 本文详细介绍了Java本地方法(JNI)的使用,涵盖从Java调用C/C++函数的完整流程。主要内容包括: 1. **基本流程**:在Java中用`native`声明本地方法,通过`javah`生成C头文件,实现C函数后编译为动态链接库并加载。 2. **数据交互**:JNI定义了`jint`、`jlong`等平台无关类型映射Java与C的基本类型;字符串通过`NewStringUTF`/`GetStringUTFChars`等函数在UTF-16和改良UTF-8之间转换。 3. **访问Java成员**:通过`GetFieldID`/`SetXxxField`访问实例域,通过`GetStaticFieldID`访问静态域,均需提供域的编码签名。 4. **调用Java方法**:使用`CallXxxMethod`调用实例方法,`CallStaticXxxMethod`调用静态方法,`NewObject`调用构造器。 5. **数组操作**:提供`GetXxxArrayElements`、`GetArrayLength`等函数读写Java数组。 6. **错误处理**:C中通过`Throw`/`ThrowNew`发布异常,配合`ExceptionOccurred`/`ExceptionClear`检测和清除异常。 7. **调用API**:C程序可通过`JNI_CreateJavaVM`创建虚拟机并调用Java代码。
2023-04-04
34
0
0
Java
2023-04-04
9、安全
本文系统介绍了Java平台的安全机制,涵盖五个核心方面: **1. 类加载器**:Java采用三级类加载体系(引导、扩展、系统类加载器),形成父委托层次结构。类加载器可作为命名空间,实现同名类的隔离。开发者可通过继承`ClassLoader`并覆盖`findClass`方法自定义类加载器,加载后的字节码会经过校验器验证安全性。 **2. 安全管理器**:通过`SecurityManager`控制敏感操作,结合基于代码来源(CodeSource)和权限(Permission)的安全策略。调用栈上所有类必须都拥有相应权限,操作才被允许,防止权限绕过。 **3. 用户认证(JAAS)**:JAAS框架支持多登录模块(如Unix、Kerberos等),通过`LoginContext`完成用户认证,并将认证后的`Subject`与权限绑定,使用`doAs`/`doAsPrivileged`在访问控制上下文中执行特权操作。 **4. 数字签名**:利用消息摘要(如SHA-256)生成数据指纹,结合公钥密码(DSA/RSA)实现数字签名。通过`keytool`管理密钥库和证书,`jarsigner`工具对JAR文件进行签名与校验,确保代码完整性和来源可信。 **5. 加密**:JCE提供对称加密(AES/DES)和公钥加密(RSA)。`Cipher`类为核心加密引擎,配合`CipherInputStream`/`CipherOutputStream`实现流式加解密。实际中常采用公钥加密传递对称密钥,再用AES处理大量数据,兼顾安全与性能。
2023-04-04
107
0
0
Java
2023-04-04
8、脚本、编译与注解处理
八、脚本、编译与注解处理8.1 Java 平台的脚本获取脚本引擎脚本引擎是一个可以执行用某种特定语言编写的脚本的类库。当虚拟机启动时,它会发现可用的脚本引擎。枚举虚拟机中的引擎构造一个 ScriptEngineManager调用 getEngineFactories 方法可以向每个引擎工厂询问它们所
2023-04-04
34
0
0
Java
2023-04-04
7、国际化
七、国际化.md7.1 Locale 对象locale 由5 个部分构成一种语言,由2 个或3 个小写字母表示,例如en (英语)、de (德语)和z h (中文) 。可选的一段脚本,由首字母大写的四个字母表示,例如Latn (拉丁文) 、Cyrl (西里尔文)和Hant (繁体中文字符) 。可选的
2023-04-04
141
0
0
Java
2023-04-04
6、日期和时间API
六、日期和时间API6.1 时间线Java 的Date 和TimeAPI 规范要求Java 使用的时间尺度为:每天86 400 秒每天正午与官方时间精确匹配在其他时间点上,以精确定义的方式与官方时间接近匹配在Java 中, Instant 表示时间线上的某个点。Instant 的值向回可追溯10 亿
2023-04-04
49
0
0
Java
2023-04-04
5、数据库编程
五、数据库编程5.1 JDBC 的设计JDBC 驱动程序类型JDBC 规范将驱动程序驱动程序将JDBC 翻译成ODBC, 然后使用一个ODBC 驱动程序与数据库进行通信。较早版本的Java 包含了一个这样的驱动程序: JDBC/ODBC 桥,不过在使用这个桥接器之前需要对ODBC 进行相应的部署和正
2023-04-04
77
0
0
Java
2023-04-04
4、网络
## 摘要 本文介绍了Java网络编程的核心知识,涵盖客户端与服务器通信的完整流程。 **连接服务器**方面,通过`Socket`类建立TCP连接,利用`setSoTimeout`设置读写超时,并通过无参构造+`connect`方法实现连接超时控制。`InetAddress`类负责主机名与IP地址的互转。 **实现服务器**方面,`ServerSocket`监听端口并通过`accept()`等待客户端连接。为服务多个客户端,文章给出了基于多线程的示例,将每个客户端交由独立线程处理。此外,介绍了**半关闭**机制(`shutdownOutput`/`shutdownInput`),适用于HTTP等一问一答的场景。 **可中断套接字**方面,推荐使用`SocketChannel`替代阻塞式Socket,使通道操作在线程中断时能及时抛出异常,避免无限阻塞。 **获取Web数据**方面,区分了`URI`(纯语法解析)与`URL`(可打开资源流)。`URLConnection`提供了更丰富的控制,包括设置请求头、查询响应头、读写超时等。提交表单数据支持**GET**(参数拼接至URL)和**POST**(通过输出流写入)两种方式,需配合`URLEncoder`进行编码。 总体而言,文章系统梳理了Java网络编程从底层Socket到高层HTTP请求的关键API与最佳实践。
2023-04-04
158
0
0
Java
2023-04-04
3、XML
# XML 技术概要总结 XML(可扩展标记语言)与 HTML 同源,但在语法上更严格:大小写敏感、结束标签不可省略、自闭合标签须以"/"结尾、属性值必须加引号且所有属性必须有值。XML 文档以可选的声明头开始,可包含文档类型定义(DTD),正文以唯一根元素为核心组织层级结构,还支持字符引用、实体引用、CDATA段、处理指令和注释等特殊标记。 **XML 解析**主要分两类:DOM(树型解析器)将整篇文档构建为内存中的节点树,便于随机访问和遍历;SAX(事件驱动流式解析器)在解析过程中回调事件处理方法,适合大文档且无需完整树结构的场景;StAX(拉式解析器)则允许开发者主动迭代获取解析事件,兼顾灵活性与效率。 **文档验证**可通过 DTD 或 XML Schema 实现。DTD 使用 `ELEMENT` 和 `ATTLIST` 规则定义元素结构与属性约束;Schema 基于 XML 本身编写,支持更丰富的数据类型(如内置类型及自定义枚举)、复杂类型组合、命名空间以及属性的可选/默认值设置,表达能力更强。 **XPath** 提供简洁的路径表达式语言,可快速定位 XML 树中的节点、节点集及属性值,支持谓词筛选和内置函数,极大简化了节点查询操作。 **命名空间**机制通过 URI 标识解决元素与属性名冲突问题,子元素继承父级命名空间,解析时需启用命名空间感知以正确区分限定名、本地名和命名空间 URI。 **XML 生成**既可使用 DOM API 在内存中构建节点树后序列化输出(支持 Transformer 或 LSSerializer),也可使用 StAX 的 `XMLStreamWriter` 逐步写出事件流,适用于带或不带命名空间的文档。**XSL 转换(XSLT)**则通过样式表将 XML 文档转换为其他格式(如 XHTML、纯文本等),实现灵活的数据格式适配。
2023-04-04
76
0
0
Java
2023-04-04
2、输入与输出
二、输入与输出2.1 输入/输出流读写字节**InputStream ** 类有一个抽象方法 abstract int read() 这个方法将读入一个字节,并返回读入的字节,或者在遇到输入源结尾时返回 -1。**OutputStream **类定义了抽象方法 abstract void write
2023-04-04
66
0
0
Java
2023-04-04
1、Java SE 8的流库
一、Java SE 8的流库1.1 从迭代到流的操作统计单词长度大于12的单词数量List<String> words = ...;// 方法一long count = 0;for (String w : words){ if (w.length() > 12) count+
2023-04-04
75
0
0
Java