Java learning_Day9(下)

本人学习视频用的是马士兵的,也在这里献上

<链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA>

提取码:fobs

内容

  • 处理流类型

处理流类型

类型 字符流 字节流
Buffering BufferedReader, BufferedWriter BufferedInputStream, BufferedOutputStream
Filtering FilterReader, FilterWriter FilterInputStream, FilterOutputStream
Converting between bytes and character InputStreamReader, OutputStreamWriter -
Object Serialization - ObjectInputStream, ObjectOutputStream
Data conversion - DatatInputStream, DataOutputStream
Counting LineNumberReader LineNumberInputStream
Peeking ahead PushbackReader PushbackInputStream
Printing PrintWriter PrintStream

缓冲流

  • 缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。
  • JDK 提供了四种缓冲流,其常用的构造方法为:

  • 缓冲输入流支持其父类的 mark 和 reset 方法。
  • BufferedReader 提供了 readLine 方法用于读取一行字符串(以 \r 或 \n 分隔)。
  • BufferedWriter提供了 newLine 用于写入一个分行隔符。
  • 对于输出的缓冲流,写出的数据会先在内存中缓存,使用 flush 方法将会使内存中的数据立刻写出。

实例(以 BufferedReader 和 BufferedWriter 为例)

import java.io.*;

public class TestBufferedStream {

	public static void main(String[] args) {

		try {
BufferedWriter bw = new BufferedWriter(new FileWriter("F:/github/JavaFile/JavaBasic/JavaSEBasic/源码/buffer/buffer.txt"));
BufferedReader br = new BufferedReader(new FileReader("F:/github/JavaFile/JavaBasic/JavaSEBasic/源码/buffer/buffer.txt"));
String input = null;
for (int i = 0; i < 100; i++) {
input = String.valueOf(Math.random());
bw.write(input);
bw.newLine();
}
bw.flush();
while ((input = br.readLine()) != null) {
System.out.println(input);
}
bw.close();
br.close();
} catch (FileNotFoundException e1) {
System.out.println("未找到文件");
System.exit(-1);
} catch (IOException e2) {
System.out.println("写入失败");
System.exit(-1);
} System.out.println("写入成功");
}
}

转换流

  • InputStreamReader 和 OutputStreamWriter 用于字节数据到字符数据之间的转换。
  • InputStreamReader 需要和 InputStream “套接”。
  • OutputStreamWriter 需要和 OutputStream “套接”。
  • 转换流在构造时可以指定其编码集合。

示例1:OutputStreamWriter “套接” OutputStream

import java.io.*;

public class TestTransform1 {

	public static void main(String[] args) {
try {
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream("F:/github/JavaFile/JavaBasic/JavaSEBasic/源码/streamreader/trans.txt"));
osw.write("microsoft intel apple google");
System.out.println(osw.getEncoding()); osw = new OutputStreamWriter(
new FileOutputStream("F:/github/JavaFile/JavaBasic/JavaSEBasic/源码/streamreader/trans.txt", true),
"ISO8859_1");
osw.write("microsoft intel apple google");
System.out.println(osw.getEncoding());
osw.close();
} catch (FileNotFoundException e1) {
System.out.println("未找到文件");
System.exit(-1);
} catch (IOException e2) {
System.out.println("写入失败");
System.exit(-1);
}
System.out.println("写入成功");
}
}

示例2:BufferedReader “套接” InputStreamReader,

import java.io.*;

public class TestTransform2 {

	public static void main(String[] args) {
InputStreamReader isr = new InputStreamReader(System.in); //将控制台输入转换为字符串
BufferedReader br = new BufferedReader(isr); try {
String input = null;
while ((input = br.readLine()) != null) {
if (input.equalsIgnoreCase("exit")) break;
System.out.println(input.toUpperCase());
}
} catch (IOException e) {
e.printStackTrace();
} }
}

数据流

  • DataInputStream 和 DateOutputStream 分别继承自 InputStream 和 OutputStream,它属于处理流,需要分别“套接”在 InputStream 和 OutputStream 类型的节点流上。
  • DataInputStream 和 DateOutputStream 提供了可以存取与机器无关的 Java 原始类型数据(如:int,double 等)的方法。
  • DateInputStream 和 DataOutputStream 的构造方法为:
    • DataInputStream(InputStream in)
    • DataOutputStream(OutputStream out)

示例:

import java.io.*;

public class TestDataStream {

	public static void main(String[] args) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos); try {
dos.writeDouble(Math.random());
dos.writeBoolean(true);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
System.out.println(bais.available()); DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readDouble());
System.out.println(dis.readBoolean());
} catch (IOException e) {
e.printStackTrace();
}
}
}

Print 流

  • PrintWriter 和 PrintStream 都属于输出流,分别针对字符和字节。
  • PrintWriter 和 PrintStream 提供了重载的 print
  • Println 方法用于多种数据类型的输出。
  • PrintWriter 和 PrintStream 的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。
  • PrintWriter 和 PrintStream 有自动 flush 功能。

示例1

public class TestPrintStream1 {

	public static void main(String[] args) {
PrintStream ps = null;
try {
FileOutputStream fos = new FileOutputStream("F:/github/JavaFile/JavaBasic/JavaSEBasic/源码/log/log.txt");
ps = new PrintStream(fos);
} catch (IOException e) {
e.printStackTrace();
} if (ps != null) System.setOut(ps); //将命令行输出转移到PrintStream流中 for (char i = 0, width = 0; i < 65535;i++, width++ ) {
System.out.print(i + " ");
if (width == 100) {
System.out.println();
width = 0;
}
}
}
}

示例2

import java.io.*;

public class TestPrintStream2 {

	public static void main(String[] args) {
String filename = new String(args[0]); if (filename != null) {
list(filename, System.out);
}
} public static void list(String f, PrintStream fs) {
try {
BufferedReader br = new BufferedReader(
new FileReader(f)); //文件的相对路径
String s = null;
while ((s = br.readLine()) != null) {
fs.println(s);
}
br.close();
} catch (IOException e) {
System.out.println("无法读取文件");
}
}
}

示例3

import java.io.*;
import java.util.*; public class TestPrintStream3 { public static void main(String[] args) {
String s = null;
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in)); try {
FileWriter fw = new FileWriter(
"F:/github/JavaFile/JavaBasic/JavaSEBasic/源码/log/log.txt");
PrintWriter log = new PrintWriter(fw); while ((s = br.readLine()) != null) {
if (s.equalsIgnoreCase("exit")) break;
System.out.println(s.toUpperCase());
log.println(s.toUpperCase());
log.println("-------");
log.flush();
} log.println("===" + new Date() + "==="); //打印当前日期
log.flush();
log.close();
} catch (IOException e) {
e.printStackTrace();
} }
}

Object 流

直接将 Object 写入或读出

示例

import java.io.*;

public class TestObjectIO {

	public static void main(String[] args) {
T t = new T();
t.i = 2; //注意这里修改了i的值
try {
FileOutputStream fos = new FileOutputStream("F:/github/JavaFile/JavaBasic/JavaSEBasic/源码/log/testobject.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(t);
oos.flush();
oos.close(); FileInputStream fis = new FileInputStream("F:/github/JavaFile/JavaBasic/JavaSEBasic/源码/log/testobject.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
T tRead = (T)ois.readObject();
System.out.println(tRead.i + " " + tRead.j + " " + tRead.c + " " + tRead.d + " " + tRead.t);
} catch (IOException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e2) {
e2.printStackTrace();
}
}
} class T implements Serializable { //Serializable 是用于序列化的标记性接口
int i = 1;
long j = 100000000000L;
char c = 'c';
double d = 3.1415;
transient int t = 5; //transient表明该变量无法被序列化
}

另外,externalizable接口可以自行控制序列化

JavaDay9(下)的更多相关文章

  1. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  2. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

  3. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  4. Ubuntu下使用nvm

    写在前面:刚写着写着博客就跨年了,希望新的一年大家万事如意,一切向"前"看! 安装 wget -qO- https://raw.githubusercontent.com/crea ...

  5. Cmder--Windows下命令行利器

    cmder cmder是一个增强型命令行工具,不仅可以使用windows下的所有命令,更爽的是可以使用linux的命令,shell命令. 安装包 安装包链接 下载后,直接解压即用. 修改命令提示符λ为 ...

  6. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  7. GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级

    一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...

  8. [APUE]UNIX进程的环境(下)

    一.共享库 共享库使得可执行文件中不再需要包含常用的库函数,而只需在所有进程都可存取的存储区中保存这种库例程的一个副本.程序第一次执行的时候或第一次调用某个库函数的时候,用动态链接方法将程序与共享库函 ...

  9. ASP.NET Aries 入门开发教程4:查询区的下拉配置

    背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...

随机推荐

  1. 数据算法 --hadoop/spark数据处理技巧 --(5.移动平均 6. 数据挖掘之购物篮分析MBA)

    五.移动平均 多个连续周期的时间序列数据平均值(按相同时间间隔得到的观察值,如每小时一次或每天一次)称为移动平均.之所以称之为移动,是因为随着新的时间序列数据的到来,要不断重新计算这个平均值,由于会删 ...

  2. docker 镜像save和转换

    docker save出来的tar包转成镜像 $ docker load < busybox.tar.gz 使用import转的镜像里面是空的,无法启动 报错如下Error: Error res ...

  3. Kafka运维大全来了!优化、监控、故障处理……

      Kafka概念   Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一个分布式的.可划分的.冗余备份的.持久性的日志服务.它主 ...

  4. 再次小结windows服务的编写

    2013-03-23 21:05 (分类:计算机程序) 其实很简单 void mian() { //服务的分派表    SERVICE_TABLE_ENTRY DispatchTable[] ={   ...

  5. linux传输文件-sftp

    SFTP sftp登陆远程服务器 sftp username@ip 例如:sftp mqadmin@10.10.1.150 然后输入password即可   put:上传文件 例如:put iosta ...

  6. ASP.NET MVC通用权限管理系统(响应布局)源码更新介绍

    一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...

  7. for遍历用例数据时,报错:TypeError: list indices must be integers, not dict,'int' object is not iterable解决方法

    一:报错:TypeError: list indices must be integers, not dict for i in range(0,len(test_data)): suite.addT ...

  8. HTML块级、行级元素,特殊字符,嵌套规则

    如果介绍HTML网页基本标签的嵌套规则,首先要说的就是元素的分类.元素可以划分为块级元素和行级元素,块级元素是什么?它可以独占一行,可以设置宽高度,默认是100%:行级元素与之相反,它的内容决定它的宽 ...

  9. opencv —— Sobel 一阶导数算子、Scharr 滤波器 一阶导数用于边缘检测

    sobel 算子的基本概念 sobel 算子是一个主要用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导,用于计算图像灰度函数的近似梯度. 其基础来自于一个事实,即在边缘部分,像素值出现“跳跃”或 ...

  10. gcc 将两个文件合成一个文件(c)

    一个文件是: 一个文件是: 两个文件的作用是输出一段文字,其中一个文件调用了另一个文件 gcc 命令为: -c 生成了object 文件,-o 生成了可执行文件,并且合成.