目录
Writer抽象类OutputStreamWriter 实现类
关于内容的读写
关于读InputStream
1. 直接读取(以二进制数据的方式读取,表现在代码中 byte为单位)
2. 文本读取
1. java.io.InputStream 输入流2. 本身是一个抽象类,真正使用过程中要依赖这个抽象的具体实现子类
FilelnputStream关于文件的输入流
3. 抽象模型
4.要记得关闭
is.close()
import java.io.FileInputStream; import java.io.InputStream; import java.util.Arrays; public class Demo4 { public static void main(String[] args) throws Exception { InputStream is = new FileInputStream("./hello.txt"); // FileInputStream 赋值给 InputStream,是因为有继承关系 // FileInputStream是InputStream的下级类 // 准备水桶 // 1024 代表能接 1024 滴(字节)水,我们准备好桶的容量 byte[] buf = new byte[1024]; // n是真正接到多少(字节)的水 // n >= 0&& n < 1024 int n = is.read(buf); //12 System.out.println(n); // 真正的数据放在 buf 从 [0, 12) byte[] bytes = Arrays.copyOf(buf, n); for (byte b : bytes) { System.out.printf("%02x\n", b); } is.close(); } }windows 上的换行默认是“\r\n"也写作CRLF
如何利用InputStream进行二进制数据的直接读取
1)一个字节
2)一次读一批
理解EOS (-1)
End Of Stream(EOS)
除了要接水之外,我们还需要一个明确的信号(说明肯定不会有新的数据了)
End Of Stream(EOS)
如果这次接了0滴水
A.是暂时现在没水了?——0B.还是以后永远没水了?—— -1
一次读一滴
import java.io.FileInputStream; import java.io.InputStream; public class Demo5 { public static void main(String[] args) throws Exception { InputStream is = new FileInputStream("./hello.txt"); while (true) { int data = is.read(); if (data == -1) { // 所有数据都被读完了 break; } // 否则,data 就是我们取到的数据 byte b = (byte) data; System.out.printf("%02x\n", b); } is.close(); } }
一次读一桶
import java.io.FileInputStream; import java.io.InputStream; public class Demo6 { public static void main(String[] args) throws Exception { InputStream is = new FileInputStream("./hello.txt"); byte[] buf = new byte[5]; while (true) { int n = is.read(buf); // n == 0 只是本次没数据,以后还有 // n == -1 本次没数据,以后也没数据了 if (n == -1) { // 代表数据全部读完 break; } for (int i = 0; i < buf.length; i++) { byte b = buf[i]; System.out.printf("%02x\n", b); } } is.close(); } }
处理文本数据(字符数据)
处理文本数据(字符数据)
ASCII、Unicode、UTF-8、GBK (GB18030、GB2312)
字符集(char set)
字符编码规则(char encoding)
计算机中的数据<->数字(有范围的整数)







最低0.47元/天 解锁文章
475

被折叠的 条评论
为什么被折叠?



