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 ...
随机推荐
- redis安装与简单实用
1.在Linux上redis的安装时十分简单的: 第一步:wget http://download.redis.io/releases/redis-2.8.12.tar.gz 解压: tar zxvf ...
- Linux学习 - 帮助命令
一.获取帮助信息man(manual) 1 功能 获得命令或配置文件的帮助信息 2 语法 man [1.5] [命令或配置文件] 1 命令的帮助 (可用 whatis 代替) 5 配置文件的帮助 ...
- Function overloading and return type
In C++ and Java, functions can not be overloaded if they differ only in the return type. For example ...
- 【Linux】【Services】【Package】yum
Linux程序包管理(2) CentOS: yum, dnf URL: ftp://172.16.0.1/pub/ YUM: yellow dog, Yellow ...
- zookeeper 异常 :stat is not executed because it is not in the whitelist. Connection closed b
1 .问题 1.启动 zookeeper 后 用指令: telnet 127.0.0.1 2181 连接 提示输入指令 :stat 后报错,然后关闭连接 2.问题解决: 修改启动指令 zkServe ...
- MySQL 用户权限相关命令
##1.创建用户: create user test identified by '123456';##identified后面跟密码 ##2.查询所有用户: select user from mys ...
- 【保姆级教程】Ubuntu18.04+Geforce 980Ti+安装CUDA10.2+Cudnn
首先感谢师兄的博客!前半部分按照这个照做没有问题! https://www.bilibili.com/read/cv9162965/ 第一步:下载CUDA 在官网下载,查询自己的GPU型号对应的CUD ...
- Pytorch入门上 —— Dataset、Tensorboard、Transforms、Dataloader
本节内容参照小土堆的pytorch入门视频教程.学习时建议多读源码,通过源码中的注释可以快速弄清楚类或函数的作用以及输入输出类型. Dataset 借用Dataset可以快速访问深度学习需要的数据,例 ...
- mysql索引最左匹配的理解(转载于知乎回答)
作者:沈杰链接:https://www.zhihu.com/question/36996520/answer/93256153来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- 在JSP页面里,时间控件的JS位置在下面然后就显示不出来
在JSP页面里,时间空间的JS位置在下面然后就显示不出来,放到前面然后就显示出来了, 情何以堪啊,开始还以为是什么错误.