commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "haruhiko nishi (JIRA)" <j...@apache.org>
Subject [jira] Commented: (IO-218) Introduce new filter input stream with replacement facilities
Date Thu, 10 Sep 2009 09:54:57 GMT

    [ 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.


Mime
View raw message