package com.zsq;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.zsq.exception.NecessaryObjectNullException;
import com.zsq.handler.OperationBytesHandler;
import com.zsq.mercenary.Reader;
import com.zsq.mercenary.ResultContentor;
import com.zsq.mercenary.Worker;
import com.zsq.mercenary.WorkerFactory;
import com.zsq.mercenary.Writer;
public class Commander {
public static final int blockSize = 1024 * 512;//512_kb
private BufferedInputStream in;
private BufferedOutputStream out;
private OperationBytesHandler operationBytesHandler;
private int blockTotalCount = 0;
private WorkerFactory workerFactory;
private ResultContentor contentor;
private Reader reader;
private Writer writer;
public void start(){
try {
init();
} catch (Exception e) {
e.printStackTrace();
}
reader.start();
writer.writeData();
closeStream();
}
public void init() throws Exception{
if(operationBytesHandler == null){
throw new NecessaryObjectNullException("缺少处理数据handler:OperationBytesHandler");
}
blockTotalCount = (int)Math.ceil(in.available() * 1.0 / blockSize);
workerFactory = new WorkerFactory(this);
contentor = new ResultContentor(this, blockTotalCount);
reader = new Reader(this, blockTotalCount);
writer = new Writer(this, blockTotalCount);
}
public void createOneWorker() {
workerFactory.createOneWorker();
}
public Worker getWorker() {
Worker worker = workerFactory.takeWorker();
return worker;
}
public void addDatas(int index, byte[] afterBytes) {
contentor.addDatas(index, afterBytes);
}
public byte[] takeDatas(int index) {
byte[] datas = contentor.takeDatas(index);
return datas;
}
private void closeStream(){
closeInputStream();
closeOutputStream();
}
private void closeInputStream(){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void closeOutputStream(){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/* Getter and Setter */
public BufferedInputStream getIn() {
return in;
}
public void setIn(InputStream in) {
this.in = new BufferedInputStream(in);
}
public BufferedOutputStream getOut() {
return out;
}
public void setOut(OutputStream out) {
this.out = new BufferedOutputStream(out);
}
public OperationBytesHandler getOperationBytesHandler() {
return operationBytesHandler;
}
public void setOperationBytesHandler(OperationBytesHandler operationBytesHandler) {
this.operationBytesHandler = operationBytesHandler;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
多线程处理数据(工具)样例
共26个文件
class:12个
java:12个
classpath:1个
需积分: 50 12 下载量 38 浏览量
2016-01-04
23:59:50
上传
评论 1
收藏 17KB RAR 举报
温馨提示
自己写的可以多线程并发处理数据流小工具,在n核处理器下使用小于n的线程数处理文件流,速度提升多倍(忘了好像是接近n-1倍)
资源推荐
资源详情
资源评论
收起资源包目录
ThreadsDo.rar (26个子文件)
ThreadsDo
.project 385B
src
com
zsq
mercenary
ResultContentor.java 2KB
Reader.java 1KB
Worker.java 719B
Writer.java 780B
WorkerFactory.java 1KB
exception
NecessaryObjectNullException.java 224B
Commander.java 3KB
handler
OperationBytesHandler.java 109B
test
ThreadTest.java 850B
DataOperationer.java 603B
UsualMethodTest.java 1KB
TimeRecord.java 353B
.classpath 232B
bin
com
zsq
mercenary
ResultContentor.class 2KB
WorkerFactory.class 1KB
Worker.class 1KB
Writer.class 1KB
Reader.class 2KB
Commander.class 4KB
exception
NecessaryObjectNullException.class 472B
handler
OperationBytesHandler.class 165B
test
TimeRecord.class 879B
DataOperationer.class 761B
ThreadTest.class 1KB
UsualMethodTest.class 2KB
共 26 条
- 1
资源评论
ZSQTB
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功