[ 
https://issues.apache.org/jira/browse/IO-218?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12753532#action_12753532
 ] 

haruhiko nishi commented on IO-218:
-----------------------------------

When I started making my version of the search/replace InputStream, the one I 
posted above, I made it to subclass of FilterInputStream and implemented such as
{code}
    public ByteArrayReplaceInputStream(InputStream in,PatternList list) throws 
IOException {
        super(in);
        if(in==null)
            throw new IllegalArgumentException("Input stream may not be null");
        this.itr=list.iterator();
        parse();
    }
    
    private void parse() throws IOException {
        byte[] srcbuf=new byte[1024];
        byte[] tmpbuf=new byte[1024];
        int size;
        while((size=in.read(tmpbuf))!=-1){
            int newcount=count+size;
            if(newcount>srcbuf.length){
                byte newbuf[]=new byte[Math.max(srcbuf.length<<1,newcount)];
                System.arraycopy(srcbuf,0,newbuf,0,count);
                srcbuf=newbuf;
            }
            System.arraycopy(tmpbuf,0,srcbuf,count,size);
            count=newcount;
        }
        buf=new byte[count];
        ByteBuffer byteBuffer=ByteBuffer.wrap(srcbuf,0,count);
        count=0;
        itr.readLock();
        try{
            match(byteBuffer,itr.next(),0,byteBuffer.limit());
        }finally{
            itr.readUnlock();
        }
    }
{code}

but then I though the creation of this buffer at parse() method is so redundant 
and I decided to change it to be like ByteArrayInputStream. 

Since your method does not buffer up the target byte sequence, I was hoping to 
get  some help from you.

> Introduce new filter input stream with replacement facilities
> -------------------------------------------------------------
>
>                 Key: IO-218
>                 URL: https://issues.apache.org/jira/browse/IO-218
>             Project: Commons IO
>          Issue Type: Improvement
>          Components: Filters
>    Affects Versions: 1.4
>         Environment: all environments
>            Reporter: Denis Zhdanov
>             Fix For: 1.4, 2.0
>
>         Attachments: ReplaceFilterInputStream.java, 
> ReplaceFilterInputStreamTest.java
>
>   Original Estimate: 120h
>  Remaining Estimate: 120h
>
> It seems convenient to have a FilterInputStream that allows to apply 
> predefined repalcement rules against the read data. 
> For example we may want to configure the following replacements:
> {noformat}
> {1, 2} -> {7, 8}
> {1} -> {9}
> {3, 2} -> {}
> {noformat}
> and apply them to the input like
> {noformat}
> {4, 3, 2, 1, 2, 1, 3}
> {noformat}
> in order to get a result like
> {noformat}
> {4, 7, 8, 9, 3}
> {noformat}
> I created the class that allows to do that and attached it to this ticket. 
> Unit test class at junit4 format is attached as well.
> So, the task is to review the provided classes, consider if it's worth to add 
> them to commons-io distribution and perform the inclusion in the case of 
> possible result.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to