Java基础(八)——IO流5_其他流
一、其他
1、System.in、System.out(标准输入、输出流)
System.in:标准的输入流,默认从键盘输入。
System.out:标准的输出流,默认从控制台输出。
改变标准输入输出(System下的静态方法)。
void setIn(InputStream in):重新分配"标准"输入流
void setOut(PrintStream out):重新分配"标准"输出流
2、PrintStream、PrintWriter(打印流)
代码示例:将内存数据打印到文件
1 public class Main {
2 public static void main(String[] args) {
3 try {
4 FileOutputStream fos = new FileOutputStream(new File("F:\\hello.txt"));
5
6 // 创建打印输出流,设置为自动刷新模式(写入换行符或字节 '\n' 时都会刷新输出缓冲区)
7 PrintStream ps = new PrintStream(fos, true);
8
9 // 把标准输出流(控制台输出)改成文件
10 System.setOut(ps);
11
12 for (int i = 0; i <= 15; i++) {
13 System.out.print(i);
14 if (i % 5 == 0) {
15 System.out.println();
16 }
17 }
18 } catch (Exception e) {
19 }
20 }
21 }
22
23 // 结果.文件:F:\\hello.txt
24 // 内容:
25 0
26 12345
27 678910
28 1112131415
代码示例:打印系统环境信息
1 public class Main {
2 public static void main(String[] args) throws Exception {
3 Properties properties = System.getProperties();
4 properties.list(new PrintStream("F:\\hello.txt"));
5 }
6 }
3、DataInputStream 、DataOutputStream(数据流)
作用:用于读取或写出基本数据类型的变量或字符串。
代码示例:写。将内存中的字符串、基本数据类型的变量写出到文件中。
1 public class Main {
2 public static void main(String[] args) {
3 try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.dat"));) {
4
5 dos.writeUTF("张三");
6 dos.writeInt(23);
7 dos.writeBoolean(true);
8
9 dos.flush(); // 刷新操作,将内存中的数据写入文件
10 } catch (Exception e) {
11 }
12 }
13 }
代码示例:读。将文件中的数据读到内存中。需要与保存的数据的顺序一致!
1 public class Main {
2 public static void main(String[] args) {
3 try (DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"));) {
4 String name = dis.readUTF();
5 int age = dis.readInt();
6 boolean isMale = dis.readBoolean();
7
8 System.out.println("name = " + name);
9 System.out.println("age = " + age);
10 System.out.println("isMale = " + isMale);
11 } catch (Exception e) {
12 }
13 }
14 }
4、管道输入流、管道输出流
管道输入/输出流和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。
管道输入/输出流主要包括了如下4种具体实现:PipedOutputStream、PipedInputStream、PipedReader和PipedWriter,前两种面向字节,而后两种面向字符。

代码示例:
1 public class Main {
2
3 public static void main(String[] args) {
4 try (PipedWriter out = new PipedWriter();
5 PipedReader in = new PipedReader();) {
6
7 // 将输入流和输出流进行连接,否则会出现IO错误
8 out.connect(in);
9
10 // 开启一个线程用于读取管道流
11 new Thread(new Print(in), "printThread").start();
12
13 // 接收键盘的输入,并写入到管道流中
14 int receive = 0;
15 while ((receive = System.in.read()) != -1) {
16 out.write(receive);
17 }
18 } catch (Exception e) {
19 }
20 }
21
22
23 static class Print implements Runnable {
24 private final PipedReader in;
25
26 public Print(PipedReader in) {
27 this.in = in;
28 }
29
30 @Override
31 public void run() {
32 int receive = 0;
33 try {
34 while ((receive = in.read()) != -1) {
35 System.out.print((char) receive);
36 }
37 } catch (IOException ex) {
38 }
39 }
40 }
41 }
上述代码,创建了线程printThread,它用来接收main线程的输入,任何main线程的输入均通过PipedWriter写入,而printThread在另一端通过PipedReader将内容读出并打印。
注意:对于Piped类型的流,必须先要进行绑定,也就是调用connect()方法,如果没有将输入/输出流绑定起来,对于该流的访问将会抛出异常。
参考文档:《Java并发编程的艺术》
Java基础(八)——IO流5_其他流的更多相关文章
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- java基础之IO流(一)字节流
java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...
- Java基础之IO流整理
Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...
- Java基础八--构造函数
Java基础八--构造函数 一.子父类中构造函数的特点 1.1 为什么在子类构造对象时,发现,访问子类构造函数时,父类也运行了呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super( ...
- 【java基础】]IO流
IO流 概念: 流的概念源于unix中管道(pipe)的概念,在unix中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备,外部文件等 一个流,一定能够会有源和去向(目的地),他 ...
- java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理
一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...
- java基础之io流总结一:io流概述
IO流概念: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.io流是实现输入和输出的基础,可以方便的实现数据的输入和输出操作. IO流的分类: 根据处理数据类型的不同分为:字符流 ...
- Java基础学习总结(13)——流IO
一.JAVA流式输入/输出原理 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块空间,在这个文件里面存放着各种各样的数据,我们 ...
- Java基础系列——IO流
---恢复内容开始--- Java对数据的操作都是通过流的方式,数据的输入和输出是相对内存来说的,将外设的数据读到内存:输入流:将内存的数据写到外设:输出流. 流按操作数据分为两种:字节流,字符流. ...
- 黑马程序员——JAVA基础之IO流FileReader,FileWriter
------- android培训.java培训.期待与您交流! ---------- IO(Input Output)流 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 J ...
随机推荐
- winXP 下安装python3.3.2
1. 安装python-3.3.2 2. 安装setuptools 下载解压后,进入路径 python setup.py install 3.安装pip 下载解压后,进入路径 python setup ...
- OC-copy,单例
总结 编号 主题 内容 一 NSFileManager NSFileManager介绍/用法(常见的判断)/文件访问/文件操作 二 集合对象的内存管理 集合对象的内存管理/内存管理总结 三 *copy ...
- 【C/C++】链表/ListNode/数据结构
vector的操作 添加元素: 向尾部添加一个元素 vector<int> a; a.push_back(1); 向尾部添加多个元素 -向尾部添加x个同样的元素: a.insert(a.e ...
- Android 内存泄漏检测工具 LeakCanary(Kotlin版)的实现原理
LeakCanary 是一个简单方便的内存泄漏检测框架,做 android 的同学基本都收到过 LeakCanary 检测出来的内存泄漏.目前 LeakCanary 最新版本为 2.7 版本,并且采用 ...
- C#编程概述(摘抄)
C#编程概述 一个简单的C#程序 标识符 标识符是一种字符串,用来命名变量.方法.参数和许多后面将要阐述的其他程序结构. 关键字 所有C#关键字都由小写字母组成,但是.NET类型名使用Pascal大小 ...
- 深入理解java虚拟机(一)
java历史 1996.01.23发布Jdk1.0 1998.12.04发布jdk1.2(里程碑的版本)注意:集合容器Collection和Map都是从1.2开始 1999.04.27HotSpot虚 ...
- Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数
Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数 不再通过遍历,对数组中的元素进行运算,利用frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数 ...
- CF919B Perfect Number 题解
Content 给定一个数字 \(k\),求出第 \(k\) 小的各数位和为 \(10\) 的数. 数据范围:\(1\leqslant k\leqslant 10000\). Solution 这题为 ...
- java 数据类型String 【正则表达式】匹配工具 Pattern和Matcher
Pattern和Matcher的介绍: Pattern对象是正则表达式编译后在内存中的表示形式,因此正则表达式宇符串必须先被编译为Pattern对象,然后再用该Pattern对象创建对应的Matche ...
- HTML body体
p br h div span <!DOCTYPE html> <html lang="en"> <head> <meta charset ...