# PDStream
**Repository Path**: yangsir/PDStream
## Basic Information
- **Project Name**: PDStream
- **Description**: 流操作器,用于强化 IO 操作,并带有附加的工具
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-09-28
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

PDStrem

-- 主页:(搭建中) --
-- Java Doc --
-- QQ群: 590022218 --
-- TG群: 算了吧,懒得翻墙了 --
-------------------------------------------------------------------------------
# 怎么来的
这个其实是我另一个项目的轮子,也是我最开始写的一个项目的提取,那个是一个安卓的清理软件,需要频繁的使用 I/O 操作,于是我便封装了他,虽然那个软件已经弃坑了。顺便加入了字符流操作、路径操作还有解析文本的功能,
# 设计哲学
经过作者本人的生活经验,该项目下的每个类都会做好自己的事情,但不会做多余的事情。该类下的几乎所有对象都可以复用。
每个操作对象就是一个 **工具** ,可以拔插装在上面的 **芯片** 。每一个源也是一个可以输入输出的 **芯片** ,可以重载里面的数据;
每一个对象都是为了 **复用、批量、并发、可关闭** 而生;
### 概念
- 不稳定流:
指在 **网络流** 等环境中的流经常会获取到错误的长度信息,或输出出错等,故称为不稳定流。
如:码云的仓库中的文件,就不可以直接获取长度进行读取,因为较长的文件会获取到不正确的长度。
- 稳定流:
如: **文件流** 等,因为可以正确的 获取长度 和稳定的读写。
- 连续操作:
指操作流的时候使用 **一定大小的缓存区** 进行操作,每次读写的东西都会先放入缓冲区 _(片段)_ 。
在读取到 **-1** 之前都会一直进行操作。这样可以保证即使获取不到正确的长度也可以正确的进行读写。
均可使用 **接口** 调整下次操作的缓冲区的大小,根据操作器还会有不同的接口要求,但都包含一个更新片段大小的方法。
-------------------------------------------------------------------------------
# 简介
提供一个用于操作流的操作器,尽力简化 I/O 操作的代码并提供用于操作 **不稳定流** 的方法。
操作器所有方法均 **支持并发和批量操作** 。除流以外其他对象均可复用并且提供相关的一些附加库。
你可以将操作器中的流和数据使用 free() 进行关闭和释放后进行重绑定。每个操作器都需要一个 [**操作源**](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/Source/StreamSource.html),在操作源类下有工场方法用于构造操作源
# 包组件
- IO 字节流操作器工场类及 NIO 操作封装类
- IO.Stream 字节流操作器
- IO.File 路径操作器
- Source 流操作源,包含一个批量关闭流用的容器
- WR 字符流操作器工场类,可使用文件和字节流创建
- WR.Stream 字符流操作器
- WR.Parsing 文本解析器,最复杂的包之一
- WR.Parsing.Source 文本解析源
- WR.Parsing.Source.Partition 文本分割器
## 使用方法
请导入其 jar 文件,文件在 [发行版](https://gitee.com/fybug/PDStream/releases) 、 [附件](https://gitee.com/fybug/PDStream/attach_files) 或项目的 [jar](https://gitee.com/fybug/PDStream/tree/master/jar) 文件夹下可以找到
>发行版中可以看到全部版本
项目下的 jar 文件夹是当前最新的编译包
附件中是最新的包
## 构造方法
>可使用流操作器类中的方法将流包装为 **缓冲流**,也可以将 **字节流** 转换为 **缓冲流**
在操作器包下有一个缩略名的工场方法 :
>I\O 操作器: [I_O](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/IO/I_O.html)
W\R 操作器: [W_R](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/WR/W_R.html)
以 I\O 操作器中的复制器 [CopyByte](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/IO/Stream/CopyByte.html) 为例
```java
// 被复制流
InputStream in;
// 输出流
OutputStream out;
// 复制器
CopyByte copy;
// 构造
copy = I_O.createCopy(in, out)
```
你也可以使用操作器中的方法增加和重绑定要操作的流
每个操作器都需要一个 [**操作源**](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/Source/StreamSource.html) 作为数据源
可使用 [StreamSource.Bytes](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/Source/StreamSource.Bytes.html) 和 [StreamSource.Strings](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/Source/StreamSource.Strings.html) 来生成数据源
>你也可以将其中的 [**操作源**](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/Source/StreamSource.html) 取出,用于其他操作器
在你不需要该操作器或不需要其中的流的时候可以使用
```java
// 清空
copy.clean();
// 释放
copy.free();
// 关闭
copy.close();
```
操作方法
```java
// 这样就好啦~
copy.copy();
```
## [I\O 操作器](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/IO/Stream/package-summary.html)
提供一个用于操作 **字节流** 的操作器
内部有使用 **连续操作** 的方法,可通过接口将片段大小调为 0 即可中断
>附加:[**路径操作器**](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/IO/File/package-summary.html)
## [W\R 操作器](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/WR/Stream/package-summary.html)
提供一个用于操作 **字符流** 的操作器,内部的 **连续操作** 方法中可使用接口处理单次读取的数据
>附加:[**文本解析器**](https://apidoc.gitee.com/fybug/PDStream/fybug/nulll/pdstream/WR/Parsing/package-summary.html)