gpt4 book ai didi

java - 如何在另一个 FilterInputStream 中使用 FilterInputStream 的自定义方法

转载 作者:行者123 更新时间:2023-12-01 11:01:02 25 4
gpt4 key购买 nike

我有两个扩展 FilterInputStream 类的流。 A 正在从流中读取 double ,B 应获取这些 double 并对它们应用随机噪声。问题是如何正确实现第二个流,以便 B 可以访问 A 返回 double 的自定义函数。链接应如下所示:

源 ----> A ----> 双 ----> B ----> 加噪声的双

最诚挚的问候,图拉卡

最佳答案

一个FilteredInputStream似乎不太适合您的问题,如 InputStream表示一个字节序列,但你需要的是 double 的序列数字。一种可能的替代方案是实现 Iterator接口(interface)代替。因此A会变成:

import java.io.InputStream;
import java.util.Iterator;
import java.util.Scanner;

public class DoubleIterator implements Iterator<Double> {
private Scanner scanner;

public DoubleIterator(InputStream is) {
scanner = new Scanner(is);

}

@Override
public boolean hasNext() {
return scanner.hasNextDouble();
}

@Override
public Double next() {
return scanner.nextDouble();
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}
}

B会变成

import java.util.Iterator;
import java.util.Random;

public class NoiseIterator implements Iterator<Double> {
Random r = new Random();
private Iterator<Double> source;

public NoiseIterator(Iterator<Double> source) {
this.source = source;
}

@Override
public boolean hasNext() {
return source.hasNext();
}

@Override
public Double next() {
return source.next()+r.nextGaussian();
}

@Override
public void remove() {
throw new UnsupportedOperationException();
}
}

这些类可以按以下方式使用:

String s = "1 56 123 30 0";

Iterator<Double> it = new DoubleIterator(new ByteArrayInputStream(s.getBytes()));
while(it.hasNext()) {
System.out.println(it.next());
}
it = new NoiseIterator(new DoubleIterator(new ByteArrayInputStream(s.getBytes())));
while(it.hasNext()) {
System.out.println(it.next());
}

典型输出:

1.0
56.0
123.0
30.0
0.0
-0.011797617285828732
55.71721599815757
123.33995522117877
29.16152453760448
-0.9614750776766922

关于java - 如何在另一个 FilterInputStream 中使用 FilterInputStream 的自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33321935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com