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 我们知道计算机是 ...
随机推荐
- 记 Maven 本地仓库埋坑之依赖包为何不能用
记一次 Maven 本地仓库埋坑之 Verifying Availability 背景 某 Java 后端项目使用 maven 构建,因为某些原因,某些依赖库下载不了,直接找其它人索要了他电脑上的 m ...
- Pandas 分组聚合
# 导入相关库 import numpy as np import pandas as pd 创建数据 index = pd.Index(data=["Tom", "Bo ...
- [考试反思]1002csp-s模拟测试56:凌乱
放假回来状态回升??(玩够了-但是稍困) T1打的不完全对,但是过掉了.很快的想到了二分吧喇叭啦.. 然后T2也挺快想出来了但是挂细节没发现,考试快结束的时候才发现出锅了. 改了过来是正解,但是出题人 ...
- 2019 .NET China Conf:路一直都在,社区会更好
这个周末,我从成都飞到了上海参加了首届由社区组织而非官方(比如Microsoft)组织的.NET开发者峰会(.NET Conf).为此,我特意请了两天的假(周五+周六,对,我们是大小周,这周六要上班) ...
- request爬虫通用的小技巧
嵩天老师一直强调的通用代码框架,这个框架可以用在很多爬虫中用来获取HTML文本,并且它通过response.raise_for_status()方法判断返回的状态码是不是200,如果不是,就会引发HT ...
- VMware下Centos7-Minimal上网配置
1.Centos7下载 http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso 2.推荐 ...
- 极光推送(JPush)开篇
Date:2019-11-11 读前思考: 极光推送是什么? 极光推送是能做什么?有什么优势? 怎么根据业务需求来实现极光推送服务呢? 简介 极光推送(JPush)是独立的第三方云推送平台,致力于为全 ...
- vue的路由安全验证
在传统的网页中: view层是由后端控制的,用户的请求到达后端的控制器中,只有当安安全全没有丝毫异常的情况下,后端才会将完成数据的渲染,返回给前端视图 前后端分离的项目: view层的切换权,转交给了 ...
- [增强for循环] 格式
比如:
- 全网阅读过20k的Java集合框架常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...