You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Tim Verbelen (JIRA)" <ji...@apache.org> on 2014/01/06 11:29:50 UTC

[jira] [Comment Edited] (FELIX-4375) Error when reading gosh_profile from stream

    [ https://issues.apache.org/jira/browse/FELIX-4375?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13862901#comment-13862901 ] 

Tim Verbelen edited comment on FELIX-4375 at 1/6/14 10:28 AM:
--------------------------------------------------------------

Instead of using a large buffer when the stream length is unknown upfront, one could also use a StringBuffer :

{code:java}
    private CharSequence readScript(URI script) throws Exception
    {
        URLConnection conn = script.toURL().openConnection();
        int length = conn.getContentLength();

        StringBuffer sbuf = new StringBuffer();
        
        CharBuffer cbuf;
        if(length == -1)
        	cbuf = CharBuffer.allocate(1024);
        else
        	cbuf = CharBuffer.allocate(length);
        
        InputStream in = conn.getInputStream();
        Reader reader = new InputStreamReader(in);
        
        while(reader.read(cbuf) > 0){
        	cbuf.flip();
        	sbuf.append(cbuf);
        	cbuf.clear(); 
        }
        in.close();
       
        return sbuf;
     }
{code}


was (Author: tverbele):
Instead of using a large buffer when the stream length is unknown upfront, one could also use a StringBuffer :

    private CharSequence readScript(URI script) throws Exception
    {
        URLConnection conn = script.toURL().openConnection();
        int length = conn.getContentLength();

        StringBuffer sbuf = new StringBuffer();
        
        CharBuffer cbuf;
        if(length == -1)
        	cbuf = CharBuffer.allocate(1024);
        else
        	cbuf = CharBuffer.allocate(length);
        
        InputStream in = conn.getInputStream();
        Reader reader = new InputStreamReader(in);
        
        while(reader.read(cbuf) > 0){
        	cbuf.flip();
        	sbuf.append(cbuf);
        	cbuf.clear(); 
        }
        in.close();
       
        return sbuf;
     }

> Error when reading gosh_profile from stream
> -------------------------------------------
>
>                 Key: FELIX-4375
>                 URL: https://issues.apache.org/jira/browse/FELIX-4375
>             Project: Felix
>          Issue Type: Bug
>          Components: Gogo Shell
>    Affects Versions: gogo.shell-0.10.0
>         Environment: Error occurred using Gogo shell on top op Concierge OSGi runtime.
>            Reporter: Tim Verbelen
>            Priority: Minor
>
> An error occurs when "gosh_profile" is read from a stream without knowing the lenght upfront. In that case, method `CharSequence readScript(URI script)` from `Shell.java` causes an error, since it does not correctly handle the case when the length is -1. In that case, a large size buffer is allocated (fixed on 10240 atm), and thus as the buffer will not be completely filled, one cannot use `cbuf.rewind()`, but use `cbuf.flip()` instead.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)