日志系统诞生记
Java 帝国一出生就带了集合、线程、IO、网络,从 C/C++ 领地拉来大批程序员,却有意无意漏掉一件大事:输出日志。程序跑起来是个黑盒,和预期不符时,单步调试费时且只能在开发机上用;生产环境更只能靠日志定位。 IO 大臣的小算盘是:System.out.println 和 System.err.…
Java 帝国一出生就带了集合、线程、IO、网络,从 C/C++ 领地拉来大批程序员,却有意无意漏掉一件大事:输出日志。程序跑起来是个黑盒,和预期不符时,单步调试费时且只能在开发机上用;生产环境更只能靠日志定位。 IO 大臣的小算盘是:System.out.println 和 System.err.…
java.util.zip 包提供了对文件压缩和解压缩的处理类,它们继承自字节流 OutputStream 和 InputStream。 GZIPOutputStream 和 ZipOutputStream 可分别把数据压成 GZIP 和 Zip 格式;GZIPInputStream 和 ZipIn…
这篇文章以例子为主,覆盖 Java IO 的绝大部分内容(不含 NIO):从 File、字节流、字符流讲到管道流、压缩和对象序列化。 代码是写出来的,不是看出来的;每个案例都配有源码和运行结果,方便对照着敲一遍。 写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和…
这是很常见的一段从键盘读入的 Java 代码。运行时只要输入的是中文,而且字符个数为奇数,最后一个字就会乱码。 BufferedReader reader = new BufferedReader( new InputStreamReader(System.in)); String message;…
java.io 包提供了 RandomAccessFile 类,用来创建和访问随机文件。使用这个类,可以跳转到文件的任意位置读写数据:插入时不必破坏其余内容,更新或删除先前数据时也不必重写整个文件。 一、构造方法 RandomAccessFile 是 Object 的直接子类,主要用下面两个构造方法…
目录是管理文件的特殊机制:同类文件放在同一目录下,既能简化管理,也能提高效率。Java 在 java.io 包里提供了 File 类,专门用来管理磁盘上的文件和目录。 每个 File 对象代表一个文件或目录,对象属性里带着路径、大小、权限等信息。调用它的方法可以创建、删除、重命名,判断读写权限和是否…
Java I/O 可以按方向分成输入 / 输出,按数据单位分成字节流和字符流。键盘 System.in 是字节输入流,要按行读成字符串,就需要 InputStreamReader 这座桥,再包 BufferedReader。 I/O 大量使用装饰模式:关掉最外层流时,会不会连带关掉被包装的流?会。下…
本文多数技巧围绕磁盘文件 I/O,但同样适合网络 I/O 和窗口输出。先看底层读写,再谈压缩、格式化和串行化等高级问题;不涉及搜索算法、数据结构,也不谈系统级文件高速缓冲。 Java 对磁盘文件有两套结构:基于字节流的,以及基于字符序列的。Java 里一个字符占两个字节,不像 C 那样一个字节就是一…
这篇是 Java IO 学习笔记加代码:从 File 对象的生成、创建、改名和属性测试,讲到拷贝、随机访问、字符流、键盘输入、过滤流、顺序流和对象串行化。 每个主题都配有完整可运行示例(包名 study.iostudy),覆盖 mkdir/createNewFile、FilenameFilter、F…
面向字节流时,最常用的是文件字节流:FileInputStream / FileOutputStream,按顺序读写本地磁盘文件。再往上套过滤流,就能按基本类型写二进制;最外层则是 System.in / System.out / System.err 三套标准流。 下面几个例子都在教材编号 10-…