java IO流(二)
一.字符编码
char
计算机存储的都是二进制数据,其实就是一个一个的数值
字符要存储,就必须让这个字符对应一个数
将一个字符转成数字,这个过程就叫编码,反过来将一个数字转成字符就叫解码
中国大陆 (GBK编码字符集)
中-->20013 编码
20013 -->中 解码
(Unicode编码字符集)
中-->10320 编码
10320-->中 解码
当编码和解码采用的字符集不同时就会产生乱码
二.桥接流
(1)何为桥椄流
2个大的用处
1 将字节流的流转换成字符流
//字节流转换为字符流,中文乱码处理
InputStream in = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
2 可以指定编码和解码的字符集
(2)InputStreamReader
(3)OutputStreamWriter
三.缓冲流
(1)何为缓冲流
之前我们使用的流去读写数据,都是立刻打开磁盘的IO,然后往磁盘读写数据。
每次的磁盘的IO操作都是非常消耗性能,效率非常低。
如果在读写数据时,先不打开磁盘IO,而是把数据放到一个缓冲区(内存),当缓冲区满了时,才去打开磁盘IO,然后将缓冲区的数据一次读写,这样的话磁盘IO操作减少了,效率得到了大大的提升
典型的以空间换时间
(2)BufferedInputStream与BufferedOutputStream
(3)BuffredWriter 与 BuffredReader
public class TestFileWriter { public static void write() throws IOException {
File file = new File("c:\\g.txt");
Writer out = new FileWriter(file);
String str = "我是中国人";
long start = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { out.write(str);
}
long end = System.currentTimeMillis();
System.out.println(end-start); out.close();
} public static void BufferedWrite() throws IOException {
File file = new File("c:\\h.txt");
Writer out = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(out);
String str = "我是中国人";
long start = System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) { bw.write(str);
}
long end = System.currentTimeMillis();
System.out.println(end-start);
bw.close();
out.close();
}
public static void main(String[] args) throws IOException {
write();
BufferedWrite(); }
}
四.数据流
(1)何为数据流
数据流指的是可以直接读写八种基本数据类型和字符串的流
二进制文件的读写
使用DataInputStream和DataOutputStream读写二进制文件
(2)DataOutputStream
(3)DataInputStream
五.打印流
(1)何为打印流
用来打印各种数据值,方便地打印各种数据值表示形式
是在其它流的基础上添加的一些功能
OutputStream
write(true); //没有的
=>write(String.valueOf(true).getBytes());//byte[] bs = "trut".getBytes();
Writer
write(true); //没有的
=》write(String.valueOf(true));
PrintStream//helloword用的打印流
print(true)
println(true);
上面2个方法最终会将任何类型的值转成字符串输出
printf()
(2)PrintStream
将任何java类型的数据都转成String输出去 System.out.println("Hello");
PrintStream out = System.out;//备份,输出到控制台,这是默认的
System.setOut(new PrintStream("test.txt"));//输出到文件
System.out.println("Hello");
System.setOut(out);
System.out.println("Hello34434354");
(3)PrintWriter
六.随机访问文件RandomAccessFile
IO
seek()
public static void main(String[] args) throws IOException {
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile("E:\\01.jpg","rwd");
byte[] b = new byte[1024 * 10];
int len = -1;//长度
while((len=raf.read(b))!=-1){
//加密
for (int i = 0; i < len; i++) {
b[i] = (byte)(b[i]^8);
}
long pos = raf.getFilePointer();//得偏移量
raf.seek(pos-len);//设置 得偏移量回到上次读的位置
raf.write(b,0,len);
}
System.out.println("加密完成");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
七.对象序例化
(1)何为对象序列化
将一个对象用流的方式输出到文件或者网络等数据源,这个过程就叫序列化
传统方式
对象流序列化方式
场合
存储游戏数据
发送游戏数据
(2)ObjectOutputStream,ObjectInputStream
(3)transient
transient - 短暂的,瞬时的,透明的
transient 禁止对象中的某个属性进行序列化或反序列化
是一个关键字,加属性的定义上,表示该属性是一个瞬时的,不需要序列化的
八.Properties
属性类,用来读取属性文件(后缀是.properties),这种文件里存放的数据
key=value
key=value
需求: 项目完成,发给用户用,不给源代码,要求之间双击运行,如何修改配置信息,(数据库连接信息,窗口打开的信息等等)
可以用Properties作配置文件,它是Java内置解析工具,解析xxx.properties文件
Properties跟map很相似。有 key----->value
Properties是集合类
Properties prop = new Properties();
prop.setProperty("driver", "com.mysql.jdbc.Driver");//driver=com.mysql.jdbc.Driver
prop.setProperty("def", "456");
//写到指定数据源上
PrintStream out = new PrintStream("conf/jdbc.properties");
//将属性文件里的内容写到终端上
prop.list(out); Properties prop = new Properties();
InputStream in = new FileInputStream("conf/jdbc.properties");
//属性文件里的内容就在prop指向对象内部
prop.load(in);
System.out.println(prop.getProperty("driverClass"));
System.out.println(prop.getProperty("url")); public class Config {
private Properties prop = new Properties();
public Config(String propertiesFile){
InputStream in = new FileInputStream(propertiesFile);
prop.load(in);
}
public String get(String key){
return prop.getProperty(key);
}
}
java IO流(二)的更多相关文章
- Java IO流(二)
目录 字节缓冲流 概述 BufferedOutputStream类 继承父类的共性成员方法 构造方法 BufferedInputStream类 继承自父类的方法: 构造方法 文件复制练习(增强版 使用 ...
- 《二》Java IO 流的分类介绍
一.根据流向分为输入流和输出流: 注意输入流和输出流是相对于程序而言的. 输出:把程序(内存)中的内容输出到磁盘.光盘等存储设备中 输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序 ...
- Java IO流详解(二)——File类
在上一章博客中简单的介绍了Java IO流的一些特征.也就是对文件的输入输出,既然至始至终都离不开文件,所以Java IO流的使用得从File这个类讲起. File类的描述:File类是文件和目录路径 ...
- Java IO流题库
一. 填空题 Java IO流可以分为 节点流 和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...
- JAVA.IO流学习笔记
一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...
- Java IO流学习
Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...
- java IO流 总结
[-] 1什么是IO 2数据流的基本概念 1 数据流 2 输入流Input Stream 3 输出流 数据流分类 3 标准IO 命令行参数 标准输入输出数据流 4javaIO层次体系结构 5 非流式 ...
- 学习笔记-java IO流总结 转载
1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...
- java IO流读取图片供前台显示
最近项目中需要用到IO流来读取图片以提供前台页面展示,由于以前一直是用url路径的方式进行图片展示,一听说要项目要用IO流读取图片感觉好复杂一样,但任务下达下来了,做为程序员只有选择去执行喽,于是找了 ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
随机推荐
- 整理有关浏览器兼容性的css样式
去掉IE自带的删除功能的×号 input::-ms-clear{display:none;} 去掉IE自带密码框的眼睛样式 input::-ms-reveal{display:none;}
- 如何用DAX实现查看每个月中不同类别排名前一位,以及一个简单的svg案例
现在给大家带来的是如何用DAX实现查看每个月中不同类别的排名前一位,最终完成效果如下!!! 首先我们需要两张简单的表 基数表 和类别表 当我们创建好表之后,我们再创建一个表格,然后我们将类别表里的列值 ...
- 推荐系统-0X-电影推荐与结果评估
import spark.sql import org.apache.spark.sql.types._ import org.apache.spark.mllib.recommendation.AL ...
- npm 包管理器的使用
1. 权限问题 Warning "root" does not have permission to access the dev dir · Issue #454 · nodej ...
- maven工程的多环境配置方案(profile)
前言: 写一篇水文来打发下时间吧^_^. 在应用开发中, 总会遇到开发/测试/预发布/线上环境, 其环境不同, 其具体的配置项也有所不同, 因此如何快速的切换各个环境配置, 进行打包配置, 成了一个小 ...
- python之路,正则表达式
python3 正则表达式 前言: (1). 处理文本称为计算机主要工作之一(2)根据文本内容进行固定搜索是文本处理的常见工作(3)为了快速方便的处理上述问题,正则表达式技术诞生,逐渐发展为一个单独技 ...
- 【重要】NOI-1.2-10-字符串大小
10:Hello, World!的大小 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 还记得在上一章里,我们曾经输出过的“Hello, World!”吗? ...
- HDU - 4454: Stealing a Cake (圆上三分)
pro:给定一个蛋糕,一个矩阵房子,一只蚂蚁.最开始三者两两相离,问蚂蚁触摸到蛋糕后再触摸矩阵的最短距离.结果保留两位小数,坐标的绝对值<1e4: sol:由于坐标不大,而且精度要求不高,不难想 ...
- xdoj-1298(模拟--简易SQL解释器)
题目链接 一 知识点: 1 substr有2种用法: 假设:string s = "0123456789"; string sub1 = s.substr( ...
- 20165313 《Java程序设计》第五周学习总结
教材学习总结 下面是我认为的重点,不足之处还请谅解: 1内部类:在一个类中定义另一个类:外嵌类:包含内部类的类. 2内部类的类体中不能声明类变量和类方法:外嵌类的类体中可以用内部类声明对象. 3非内部 ...