Java基础IO类之字符串流(查字符串中的单词数量)与管道流
一、字符串流
定义:字符串流(StringReader),以一个字符为数据源,来构造一个字符流。
作用:在Web开发中,我们经常要从服务器上获取数据,数据返回的格式通常一个字符串(XML、JSON),我们需要把这个字符串构造为一个字符流。然后再用第三方数据解析器来解析数据。
代码示例:计算一个字符串有多少个单词
package IODemo; import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader; /**
* 注意 有可能是面试题目
*
*/ public class StringStreamDemo { private static void stringReader(){ String str = "good good study day day up";
StringReader sr = new StringReader(str);
// 流的标记器(分析这个流里面的内容) 字符值用于查找字符的五个可能属性: 空格 , 字母 , 数字 , 字符串引号和注释字符 。 每个角色都可以有零个或多个这些属性。
StreamTokenizer st = new StreamTokenizer(sr);
int count = 0;
// ttype 在读取后的这个标记类型等于结尾的话就要一直循环读
while (st.ttype != StreamTokenizer.TT_EOF){
try {
//如果 读了这个流里面的内容的是一个单词的话 就累加
if (st.nextToken() == StreamTokenizer.TT_WORD){
count++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("count="+count);
sr.close();
} public static void main(String[] args) { stringReader();
}
}
二、管道流
管道输入流:
PipedInputStream:
- 管道输入流应连接到管道输出流; 管道输入流然后提供写入管道输出流的任何数据字节。
- 典型地,数据被从一个读
PipedInputStream对象由一个线程并且数据被写入到对应的PipedOutputStream通过一些其它线程。 - 不建议尝试从单个线程使用这两个对象,因为它可能会使线程死锁。
- 管道输入流包含一个缓冲区,在读取操作中将读取操作与限制内的操作相分离的管道被认为是broken如果正在提供的数据字节到连接的管道输出流中的线程不再存活。
管道输出流:
PipedOutputStream:
- 管道输出流可以连接到管道输入流以创建通信管道。 管道输出流是管道的发送端。
- 典型地,数据被写入到一个
PipedOutputStream由一个线程对象和数据被从连接读取PipedInputStream通过一些其它线程。 - 不建议尝试从单个线程使用这两个对象,因为它可能会使线程死锁。 管被说成是broken如果从连接读取数据字节的螺纹管道输入流不再存活。
代码示例:
package IODemo; import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
/**
*
* 管道输入流应连接到管道输出流; 管道输入流然后提供写入管道输出流的任何数据字节。
* 典型地,数据被从一个读PipedInputStream对象由一个线程并且数据被写入到对应的PipedOutputStream通过一些其它线程。
* 不建议尝试从单个线程使用这两个对象,因为它可能会使线程死锁。
* 管道输入流包含一个缓冲区,在读取操作中将读取操作与限制内的操作相分离。 的管道被认为是broken如果正在提供的数据字节到连接的管道输出流中的线程不再存活。
*/
public class PipedStreamDemo {
public static void main(String[] args) {
PipedInputStream pin = new PipedInputStream();
PipedOutputStream pout = new PipedOutputStream(); try {
pin.connect(pout); //将两个管道进行连接 输入流与输出流进行连接 } catch (IOException e) {
e.printStackTrace();
}
Pipwriter pipwriter = new Pipwriter(pout);
PipReader pipReader = new PipReader(pin);
new Thread(pipReader).start(); //先启动读的,再启动写的,让读的先在哪里等待
new Thread(pipwriter).start(); }
} class Pipwriter implements Runnable{
private PipedOutputStream pout = new PipedOutputStream(); public Pipwriter(PipedOutputStream pout) {
this.pout = pout;
}
@Override
public void run() {
String str = "我是落魄书生!";
try {
pout.write(str.getBytes());
pout.close();
} catch (IOException e) {
e.printStackTrace();
} }
} class PipReader implements Runnable{
private PipedInputStream pin = new PipedInputStream(); public PipReader(PipedInputStream pin) {
this.pin = pin;
}
@Override
public void run() {
byte[] bytes = new byte[1024];
try {
int len = pin.read(bytes); //read 会阻塞 len实际的长度
String str = new String(bytes,0,len); // 通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String
System.out.println("读到:"+str);
pin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java基础IO类之字符串流(查字符串中的单词数量)与管道流的更多相关文章
- Java基础IO类之打印流
package IODemo; import java.io.*; /* 打印流 : 很方便的进行输出 字节打印流 增强输出功能 字符打印流 */ public class PrintStreamDe ...
- Java基础IO类之缓冲流
首先要明确一个概念: 对文件或其他目标频繁的读写操作,效率低,性能差. 使用缓冲流的好处是:能够高效的读写信息,原理是先将数据先缓冲起来,然后一起写入或者读取出来. 对于字节: BufferedInp ...
- Java基础IO类之对象流与序列化
对象流的两个类: ObjectOutputStream:将Java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutputStrea ...
- Java基础IO类之字节数组流
package IODemo; //字节数组流 :内部维护这着一个字节数组,我们可以利用流的读取机制来处理字符串 无需关闭,不会报IO异常 // ByteArrayInputstream ByteAr ...
- Java基础IO类之字节输入输出流
一.IO流概述 1.IO流:输入输出流(Input/Output) 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象,即数据在设备间的传输流, 流的本质是数据传输,根据数据传输特性将 ...
- Java基础IO类之File类
大三了,目前基础太差了,重新学习过!代码如下,里面都有详细的解释每一行代码代表的意思~ package IODemo; import java.io.File; import java.io.File ...
- Java基础IO类之数据流
DataInputStream: 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本java数据类型.应用程序可以使用数据输出流 写入稍后由数据输入流读取的数据.DataInputStrea ...
- Java基础-IO流对象之File类
Java基础-IO流对象之File类 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IO技术概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下 ...
- Java基础-IO流对象之字符类(FileWrite与FileReader)
Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...
随机推荐
- 基于node的前端项目代码包发布至nexus
目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...
- OPTIONS 请求引发的分析
阅读提纲: 为什么会出现 OPTIONS 请求? 什么情况下会出现 OPTIONS 请求? OPTIONS 请求会发送什么内容? 跨域前端访问后端时,所有的 Ajax HTTP 请求都会先发送一个 O ...
- [考试反思]1105csp-s模拟测试102: 贪婪
还是有点蠢... 多测没清空T3挂40...(只得了人口普查分20) 多测题要把样例复制粘两遍自测一下防止未清空出锅. 然而不算分... 其实到现在了算不算也不重要了吧... 而且其实T3只考虑最长路 ...
- NOIP模拟 9
%liu_runda Orz T1 随 矩阵快速幂结合概率期望 但n3无法承受 利用原根的性质,将乘法转化成加法 就变成循环矩阵n^2了 改题时苦b地卡了关:误把1当成原根的1次方,错误地认为矩阵的阶 ...
- 考试T2修剪草坪
传送门 这题的DP真是刷新了我的理解,竟然还要用队列优化.... #include<iostream> #include<cstdio> using namespace std ...
- Jenkins集群下的pipeline实战
关于Jenkins集群 在<快速搭建Jenkins集群>一文中,我们借助docker快速搭建了Jenkins集群,今天就在这个集群环境中创建pipeline任务,体验Jenkins集群下的 ...
- 为什么Python类语法应该不同?
做过python的人你会发现想要的东西跟它原有的是不同的.Python对我来说是真的是这样.如果可以的话,对于Python中很多的我想要改的东西,我有很多的想法.现在我向您讲述其中一个:类定义的语法. ...
- nyoj 27-水池数目(BFS, DFS)
27-水池数目 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:17 submit:22 题目描述: 南阳理工学院校园里有一些小河和一些湖泊,现在,我 ...
- Prometheus+Altermanager钉钉报警
Prometheus+Altermanager钉钉报警 一.添加钉钉机器人 参考钉钉官方文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq ...
- vuejs学习之新的components组件挂载
暂时写个目录,内容待完善,主要是记录我的学习过程,方便以后复习