Java 应用与开发 - 高级 I/O 编程不适合获取文本文件中的字符信息,要读取 并显示的文件中如果含有双字节字符(如中文),则会显示 乱码,此时应该采用字符流类型。 ▶ 可以用于复制任��式的文件,如文本、���以�可�行 文件�二进制文件,因为以字节为单位进行数据复制时并不 对文件��进行解析。 CODE ± Fragment: 使用字节流实现文件复制 1 FileInputStream fis = new FileInputStream("in.txt"); iter 类 用于将字符数据写出到文本文件。 ▶ 字符 I/O 流类型只能处理文本文件,因为二进制文件中保 存的字节信息不能正常解析为字符。 CODE ± Fragment: 使用字符流实现文件复制 1 FileReader fis = new FileReader("in.txt"); 2 // The second arg is boolean append, true for appending 提供字符的缓冲写出功能,该类的 newLine() 方法可以写出平台相关的行分隔符来标记一行的 终止,此分割符由系统属性 line.separator 确定。 CODE ± Fragment: 使用字符处理流实现文件复制 1 BufferedReader br = new BufferedReader(new FileReader("in.txt")); 2 BufferedWriter bw = new BufferedWriter(new0 码力 | 27 页 | 609.17 KB | 1 年前3
Java 应用与开发 - Java 内存模型与分配机制定义的静态成员。(Perm) 1注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因 为同一个类的对象拥有各自的成员变量,存储在各自的堆内存中,但是他们共 享该类的方法,并不是每创建一个对象就把成员方法复制一次。 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 程序运行过程会涉及的内存区域 程序计数器 当前线程执行的字节码的行号指示器。 栈 保存局部变量的值,包括:用来保存基本数据类型的值; 定义的静态成员。(Perm) 1注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因 为同一个类的对象拥有各自的成员变量,存储在各自的堆内存中,但是他们共 享该类的方法,并不是每创建一个对象就把成员方法复制一次。 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 程序运行过程会涉及的内存区域 程序计数器 当前线程执行的字节码的行号指示器。 栈 保存局部变量的值,包括:用来保存基本数据类型的值; 定义的静态成员。(Perm) 1注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因 为同一个类的对象拥有各自的成员变量,存储在各自的堆内存中,但是他们共 享该类的方法,并不是每创建一个对象就把成员方法复制一次。 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 程序运行过程会涉及的内存区域 程序计数器 当前线程执行的字节码的行号指示器。 栈 保存局部变量的值,包括:用来保存基本数据类型的值;0 码力 | 44 页 | 818.30 KB | 1 年前3
《Java 应用与开发》课程讲义 - 王晓东对数组排序 通过 sort 方法。 比较数组 通过 equals 方法比较数组中元素值是否相等。 查找数组元素 通过 binarySearch 方法能对排序好的数组进行二分查找法操作。 复制数组 把数组复制成一个长度为 length 的新数组。 示例代码:Array 操作示例 1 /* 2 * 数组比较 equals 3 */ 4 String [] str1 = { ”1”, ”2” sort(b); 38 int j = Arrays.binarySearch(b, ’e’); 39 System.out.println(j); // 结果是:4 41 /* 42 * 把数组内容复制到一个新数组中 copyOf 43 */ 44 int [] c = { 1, 2, 3 }; 45 int [] d = Arrays.copyOf(c, c.length + 2); // // 参数1:原数组 参数2:新数组的长度 46 System.out.println(”原数组为:” + Arrays.toString(c)); 47 System.out.println(”复制后的新数组为:” + Arrays.toString(d)); 3.5 字符串 字符串是用一对双引号括起来的字符序列。Java 语言中,字符串常量或变量均用 类实现。 . . . . . .0 码力 | 330 页 | 6.54 MB | 1 年前3
Hello 算法 1.1.0 Java版据结构可 以动态地添加或删除元素,但它们的容量是固定的。如果数据量超出了预分配的大小,就需要创建一个新的 第 3 章 数据结构 hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢? 在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作由类内部自动完成。例如,Java 的 在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。因此在 大多数编程语言中,数组的长度是不可变的。 如果我们希望扩容数组,则需重新建立一个更大的数组,然后把原数组元素依次复制到新数组。这是一个 ?(?) 的操作,在数组很大的情况下非常耗时。代码如下所示: // === File: array.java === /* 扩展数组长度 */ int[] extend(int[] extend(int[] nums, int enlarge) { // 初始化一个扩展长度后的数组 int[] res = new int[nums.length + enlarge]; // 将原数组中的所有元素复制到新数组 for (int i = 0; i < nums.length; i++) { res[i] = nums[i]; 第 4 章 数组与链表 hello‑algo.com 72 }0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Java 版以动态地添加或删除元素,但它们的容量是固定的。如果数据量超出了预分配的大小,就需要创建一个新的 第 3 章 数据结构 www.hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢? 在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作由类内部自动完成。例如,Java 的 在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。因此在 大多数编程语言中,数组的长度是不可变的。 如果我们希望扩容数组,则需重新建立一个更大的数组,然后把原数组元素依次复制到新数组。这是一个 ?(?) 的操作,在数组很大的情况下非常耗时。代码如下所示: // === File: array.java === /* 扩展数组长度 */ int[] extend(int[] extend(int[] nums, int enlarge) { // 初始化一个扩展长度后的数组 int[] res = new int[nums.length + enlarge]; // 将原数组中的所有元素复制到新数组 for (int i = 0; i < nums.length; i++) { res[i] = nums[i]; 第 4 章 数组与链表 www.hello‑algo.com 720 码力 | 379 页 | 18.48 MB | 10 月前3
Java 应用与开发 - MVC 和框架初步Struts 2 本节习题 MVC 大纲 Java Web 应用的开发演化 经典 MVC 框架 - Struts 2 本节习题 MVC 的特点 1. 多个视图可以对应一个模型,可以减少代码的复制,在模型 发生改变时,易于维护。 2. 模型返回的数据与显示逻辑分离。模型数据可以应用任何显 示技术,例如,使用 JSP、Velocity 模板或者直接产生 Excel。 3. 应用被分为三层,降低各层耦合,提高了可扩展性。 commons-io-*.jar、freemarker-*.jar、javassist-*.jar、 ognl-*.jar、struts2-core-*.jar、xwork-core-*.jar 必备 类库复制到Web 应用的 WEB-INF/lib 路径下。 如果需要在 DOS 或 Shell 窗口下手动编译 Strut 2 相关程 序,还需要将 struts2-core-*.jar 和 xwork-core-* value="UTF-8"/> 11 ... 12 注意:在 Eclipse 的管理下,当 Eclipse 生成、部署 Web 项目时, 会自动将 src 路径下除了 *.java 外所有的文件都复制到 Web 应 用的 WEB-INF/classes 路径下,所以 struts.xml 文件可以放在 src 目录。 大纲 Java Web 应用的开发演化 经典 MVC 框架 - Struts0 码力 | 51 页 | 837.26 KB | 1 年前3
Hello 算法 1.0.0 Java版据结构可 以动态地添加或删除元素,但它们的容量是固定的。如果数据量超出了预分配的大小,就需要创建一个新的 第 3 章 数据结构 hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢? 在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作由类内部自动完成。例如,Java 的 在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。因此在 大多数编程语言中,数组的长度是不可变的。 如果我们希望扩容数组,则需重新建立一个更大的数组,然后把原数组元素依次复制到新数组。这是一个 ?(?) 的操作,在数组很大的情况下非常耗时。代码如下所示: // === File: array.java === /* 扩展数组长度 */ int[] extend(int[] extend(int[] nums, int enlarge) { // 初始化一个扩展长度后的数组 int[] res = new int[nums.length + enlarge]; // 将原数组中的所有元素复制到新数组 for (int i = 0; i < nums.length; i++) { res[i] = nums[i]; 第 4 章 数组与链表 hello‑algo.com 72 }0 码力 | 376 页 | 17.59 MB | 1 年前3
Nacos架构&原理
Nacos 无法正常工作? 经跟阿里负责 Nacos 开源核心开发者(感谢@彦林@涌月)⼀起排查,发现这次升级是从 rc 环境上 把运行中的 Nacos Server 直接打包压缩复制到生产环境用于升级,而复制过去的目录包含了 rc 环 境的缓存数据, Nacos Server 启动时会读取缓存数据,从而会影响 Nacos Server 的正常工作。 如果这种异常的工作状态没有被发现,并且 fat 环境和 rc 环境时.不是直接复制正在运行的 Nacos Server 来升级,没有环境缓存的数据, 因此升级后能正常工作。 中间件,作为最底层的基础设施,应该保证部署结构等各个环境保持⼀致。 Nacos 最佳实践 < 280 7. 总结 1. 升级生产环境时是从 rc 环境上把运行中的 Nacos server 直接复制到生产环境用于升级,而 复制过去的目录包含了 rc 环境的缓存数据,会影响 /v0.18.0.tar.gz tar -xvf v0.18.0.tar.gz mv confd-0.18.0 confd cd confd make 321 > Nacos 最佳实践 复制 confd 文件到 bin 目录下,启动 confd。 sudo cp bin/confd /usr/local/bin confd confd 结合 Nacos 实现 nginx 配置管理示例0 码力 | 326 页 | 12.83 MB | 9 月前3
Java 应用与开发 - Java 数组和字符串对数组排序 通过 sort 方法。 比较数组 通过 equals 方法比较数组中元素值是否相等。 查找数组元素 通过 binarySearch 方法能对排序好的数组进行二 分查找法操作。 复制数组 把数组复制成一个长度为 length 的新数组。 课程配套代码 ± sample.array.ArrayToolsSample.java 大纲 数组的概念 一维数组 二维数组 字符串 接下来…0 码力 | 33 页 | 620.46 KB | 1 年前3
Hello 算法 1.0.0b1 Java版extend(int[] nums, int enlarge) { // 初始化一个扩展长度后的数组 int[] res = new int[nums.length + enlarge]; // 将原数组中的所有元素复制到新数组 for (int i = 0; i < nums.length; i++) { res[i] = nums[i]; } // 返回扩展后的新数组 return res; } TreeNode nex = getInOrderNext(cur.right); int tmp = nex.val; // 递归删除结点 nex remove(nex.val); // 将 nex 的值复制给 cur cur.val = tmp; } return cur; } /* 获取中序遍历中的下一个结点(仅适用于 root 有左子结点的情况) */ TreeNode getInOrderNext(TreeNode 根据判断结果交替前进(指 针 k 也前进),直至两个子数组都遍历完,即可完成合并。 合并方法 merge() 代码中的主要难点: ‧ nums 的待合并区间为 [left, right] ,而因为 tmp 只复制了 nums 该区间元素,所以 tmp 对应区间为 [0, right - left] ,需要特别注意代码中各个变量的含义。 ‧ 判断 tmp[i] 和 tmp[j] 的大小的操作中,还 需考虑当子数组遍历完成后的索引越界问题,即0 码力 | 186 页 | 14.71 MB | 1 年前3
共 19 条
- 1
- 2













