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