在ByteArrayOutputStream内部搜索子字符串

时间:2018-11-23 12:46:24

标签: java substring

我有以下代码(简化):

 InputStream from = ...
 ByteArrayOutputStream answer = new ByteArrayOutputStream();
 String res = "";

 int maxn = 1024;
 byte[] buffer = new byte[maxn]; 
 while( true ) {
    int a = from.available();
    if( a > 0 ) {
        if( a > maxn ) a = maxn;
        a = from.read( buffer, 0, a );
        answer.write( buffer, 0, a );

        res = answer.toString();
        if( res.contains( "myprompt" ) ) return res;
    }
}

有任何方法可以在每次迭代时跳过将答案从字符串转换为字符串的方法,只是检查它是否包含“ myprompt”?

似乎效率低下。

谢谢。

1 个答案:

答案 0 :(得分:2)

简短的回答是“否”。 ByteArrayOutputStream除了创建新对象并返回其中所有内容的查询方法外,没有其他查询方法。

如果仍然丢弃ByteArrayOutputStream,为什么还要使用它呢?您可以使用包含StringBuilder方法的indexOf()方法,该方法可以搜索子字符串。

[edit]以及有关字符编码的一种警告:ByteArrayOutputStream.toString()使用平台默认编码,无论您是否喜欢。同样,不管您是否喜欢,将字节附加到StringBuilder都将使用ISO_8859_1的等效项(即1个字节→一个字符)。如果需要特定的编码,则需要另一种方法,它的效率不如StringBuilder(但比当前的实现要高效)。