传智播客的JAVA SE高级视频2 IO 自学笔记:
File类:
1.IO包中唯一代表磁盘文件本身信息的类,而不是文件中内容。
2.创建、删除、重命名文件等方法。
3.Java中目录被当作一种特殊文件使用,list方法返回所有子目录和文件。
4.Unix下路径分隔符'/',windows下分隔符为'\'。
RandomAccessFile类
支持随机访问方式。
RandomAccessFile类在随机(相对顺序而言)读写等长记录格式文件时有很大优势。可以将记录当成一个整体来读取。
RandomAccessFile类仅限于操作文件,不能访问其他IO设备,如网络、内存映像。
writeChars();
readChar();
流:字节序列的抽象概念
文件是数据的静态存储形式,而流是数据传输时的形态。
InputStream
int read() 读取一字节。为什么不返回byte呢?
因为二进制形式为11111111的数,以byte表示为-1,以int表示为255。返回-1表示读到文件尾。
int available();
OutputStream
void write(int b); // byte运算时自动提升为int
flush();
FileInputStream、FileOutputStream
PipedInputStream、PipedOutputStream
使用管道流类,可以实现各个程序模块间的松耦合通信。
ByteArrayInputStream、ByteArrayOutputStream
用于以IO流方式来完成对字节数据内容读写类似内存虚拟文件或内存映像文件功能。
System.in是InputStream类型
System.out是PrintStream类型
不管各种底层物理设备用什么方式实现数据终止点,InputStream的read方法总以-1表示结束。
windows下:Ctrl+Z表示键盘输入结束,Ctrl+C表示强制结束。
Unix/Linux下:Ctrl+D表示输入结束
建议:要编程从键盘上连续读取一大段数据时,应尽量将读取数据的过程放在函数中,使用-1作为输入结束。在函数中编写代码不应直接使用System.in读取,而应用一个InputStream类型的形参,然后将System.in作为实参传递给函数。
字符编码:
1.计算机里只有数字,计算机里一切都是用数字来表示的。
2.字符a对应数字97,b对应98,这种字符与数字对象的编码规则称为ASCII。ASCII最高位都为0,能标售0~127.
3.中文字符,用两个字节表示,每个字节最高位为1,编码为GB231(国标码)。
4.在GB2312上,对更多中文字符(繁体)进行了编码,新的编码规则称为GBK。
5.中国的"中"字,在大陆编码为D6D0,在台湾是A4A4,台湾地区对中文字符集的编码规则称为BIG5(大五码)。
6.在一个国家的本地化系统中出现的一个字符,通过网络传送到另一个国家的本地化系统中,看到的就不是原始字符了,而是另一个国家的一个字符或乱码。
Unicode编码:
1.ISO组织将全世界所有字符统一编码,称为Unicode编码。
2."中"字,在Unicode中对应的是4E2D。
3.Unicode占2字节,ASCII中字符只是简单地增加一个字节(0),Unicode中有63000多个字符,2000多个未使用。
4.未包括藏文、一些古字、满文等。
5.在相当长的一段时间内,本地化字符编码将与Unicode编码共存。
6.Java中字符使用Unicode编码。
UTF-8编码:
ASCII码字符保持原样,仍占1字节,对其他国家字符,UTF-8使用2或3个字节表示。使用UTF-8的文件,通常都要用EF BB BF作为文件开头的3个字节数据。
优点:不出现0x00字节,便于应用程序检测数据在传输中是否发生了错误。
缺点:有的字符占太多字节。
UTF-16编码(2字节):
在Unicode上扩充,增加了藏文、满文、古字、阿拉伯问等。
Unicode编码将0xD800-0xDFFF区间的数据保留处理,UTF-16扩充的字符,占用4字节。
String str="中国"; // Unicode
str.getBytes("GBK");
包装类:
DataOuputStream:写入各种类型数据,float、int...
PipedOutputStream
BufferedOutputStream
PrintStream:遇到换行,自动刷新,清空缓冲区。
PrintWriter:println方法会根据操作系统的不同而生成相应的文本换行符,windows下:"\r\n",Linux下:"\n"。遇到换行,不会自动刷新。
ObjectInputStream和ObjectOutputStream:所读写对象必须实现了Serializable接口,对象中static和transient不会被读写。
InputStreamReader和OutputStreamWriter
Java程序与其他进程数据通信(常用)
使用Process类表示子进程,子进程的标准输入和输出不是再连接到键盘和显示器,而以管道流的形式连到父进程的一个输出和输入流上。
Decorator设计模式(装饰者模式)
1.用一个对象(the Decorator)包装另一个对象,称为Decorator模式。
2.需要设计自己的IO包装类时,需要继承以FilterXXX命名的类。
分享到:
相关推荐
### 李兴华Java IO笔记知识点详述 #### 流和基础知识 流是计算机科学中用于数据传输的基本概念,它可以被视为一系列连续的数据元素。在Java中,流主要分为两种类型:**输入流**和**输出流**。输入流用于从数据源...
本笔记将深入探讨Java IO流的各个方面,从基础的节点流到功能强大的装饰缓冲流,帮助开发者更好地理解和应用这一关键概念。 一、Java IO流概述 Java IO流分为四个主要类别:字节流(Byte Stream)、字符流...
Java的IO(输入/输出)系统是编程中一个至关重要的部分,它允许程序与外部世界进行数据交换。本文将深入探讨Java IO的一些基础知识,包括基本流、缓冲流、数据流和对象序列化。 首先,我们从最基础的流开始。在Java...
在 Java 中,可以通过 `java.io.File` 类来创建文件或文件夹。代码示例展示了如何使用 `File` 类创建一个名为 `hsp.txt` 的文件。 ```java File f = new File("d:\\hsp.txt"); if (!f.exists()) { try { // 创建...
java 中文件的操作,适合基本入门的 ,
Java IO流是Java编程语言中处理输入输出操作的重要部分,尤其在数据传输、文件读写等方面发挥着核心作用。本文将深入探讨Java IO流的基本概念、类型以及它们在实际开发中的应用。 首先,理解IO流的基本概念至关重要...
Linux 文件 IO 之整理笔记 本文总结了 Linux 文件 IO 的相关知识点,涵盖了文件 IO 的基本概念、文件描述符、open 函数、read 函数、write 函数、lseek 函数、close 函数等。 一、文件 IO 概念 文件 IO 是计算机...
IO流: Input Output 输入输出流 自己去扩展: 1. 对象序列化和反序列化生成一个 2. 流的种类: io包下 扩展nio包下 1. IO分类: 输入流 输出流 字节流 InputStream(抽象类) ...
### Java IO流知识点详解 #### 一、Java IO流概述 在Java中,输入/输出(Input/Output,简称IO)操作是程序与外部设备进行数据交换的重要方式。Java提供了强大的IO流处理类库,主要位于`java.io`包中。这些类库...
Java IO流详解
io流学习笔记,主要适合入门的人士学习及观看
IO系统解构有装饰者设计模式息息相关,所以先从分析它们的关系:
### Java IO流学习笔记 #### 一、IO流的四大抽象类 - **InputStream/OutputStream**:字节的输入输出流的抽象类。 - 数据单位:字节(8比特,范围0-255) - **Reader/Writer**:字符的输入输出流的抽象类。 - ...
标题 "Asus K50IO K70IO Rev 2.1 Board View" 提供了有关此文件的核心信息,它是一份关于华硕K50IO和K70IO笔记本电脑主板的视图文档,具体版本为2.1。这份资料通常对主板维修人员非常有价值,因为它提供了详细的硬件...
Java IO是Java编程语言中用于输入/输出操作的重要部分,它提供了一系列的类和方法来处理数据的读写,文件的创建、删除以及流的管理等。以下是对标题和描述中涉及的知识点的详细说明: 1. **文件对象的生成**: 在...
《draw.io笔记编辑器源码解析》 在IT行业中,源码分析是提升技术理解、学习新知识的重要途径。draw.io是一款广受欢迎的在线图表绘制工具,它提供了丰富的图形库和简单易用的界面,使得非专业用户也能轻松创建流程图...
java学习笔记1(java io/nio)设计模式
本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...
在"RapidIO学习笔记"中,我们可以深入探讨以下几个关键知识点: 1. **协议层次结构**:RapidIO协议分为物理层(PHY)、串行链路层(SLL)和传输层(TL)。物理层处理实际的信号传输,串行链路层负责将并行数据转换...
在"commons-io使用笔记"中,我们可以探讨几个主要类的用法。 1. **FileUtils**: 这个类提供了大量静态方法来处理文件操作,如复制、移动、删除文件,读取文件内容,比较文件等。例如,`FileUtils.readFileToString...