outputstream转inputstream_outputStream转inputStream

最近接触到针对ceph的非功能性测试,提供的上传接口如下

上传public  id upload(inputstream)

但是ceph本身类似于网盘,一个相同的文件上传上去,会返回相同的id

所以通过DFS不太好理解,网盘的话就比较容易理解了,因为服务器上并没有发生写操作,返回的是之前写过的一个文件

我们要测试…….要非功能性测试,涉及在上传过程中的骚操作,然后需要保证次数和文件数的一致

如果要保证每次都返回不一样的id,就需要每次都构造一个完全不一样的文件,文件内容整个UUID就能搞定,恶心的问题在接口上,在仔细看看上面的接口,是一个inputstream,而构造文件的输出一般是outputstream,所以问题的难点转换成,怎么把outputstream转换为inputstream??

想到这边,我突然想起大概在10年前,在阿里的面试上,当面试快结束的时候,面试官随口说的一个问题,当时我没有答上来,我反而在质疑为什么会有这种需求…拿易五的年轻时代啊…后面我也搜索过上述问题的解决方案,官方推荐的解决方法是使用pipeline进行操作

有些事情呢,只有做到了,才能Let it be,才能很轻巧的说,"也就那样吧…"

下面为示例代码

public static voidmain(String[] args)throws Exception{

finalPipedInputStream pipeIn = new PipedInputStream();  

finalResult result = new Result();

    Thread t = new Thread(new Runnable() {

@Override

publicvoid run() {

StreamTesttest = new StreamTest();

Stringuuid = test.input(pipeIn);

result.setUuid(uuid);

}

});

    t.start();

    PipedOutputStream pipeOut = newPipedOutputStream(pipeIn);  

    PrintWriter writer = new PrintWriter(newBufferedWriter(new OutputStreamWriter(pipeOut)));  

    for(int i = 0 ;i<10000;i++) {

           writer.println("Comingthrough the pipe...senvon   "+i);  

    writer.flush();  

    }

    writer.close();

//等待t线程执行完成,否则result里面会获取不到uuid的值

    t.join();

   System.out.println(result.getUuid()+"============");

}

//模拟inputstream操作

public Stringinput(InputStream input) {

BufferedReaderreader = new BufferedReader(new InputStreamReader(input));

Stringline = null;

try{

while((line= reader.readLine()) != null) {

System.out.println("receivemessage = "+line);

}

reader.close();

returnUUID.randomUUID().toString();

}catch(Exceptione) {

e.printStackTrace();

}

returnnull;

}

private static classResult {

Stringuuid;

publicResult(String uuid) {

this.uuid= uuid;

}

publicResult() {}

publicString getUuid() {

returnuuid;

}

publicvoid setUuid(String uuid) {

this.uuid= uuid;

}

}

执行结果

2ce013c69f65950fe220c0fef82fe113.png

Let it be了,也就那样吧

是以为记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值