附加字符串数据

时间:2014-02-03 08:43:18

标签: java memory-management arraylist io amazon-s3

这是我的代码:

ByteArrayInputStream input = new ByteArrayInputStream(jsonArrayNew.toString().getBytes());  
 Long contentLength = Long.valueOf(jsonArrayNew.toString().getBytes().length);  
 ObjectMetadata metaData = new ObjectMetadata();
 metaData.setContentLength(contentLength);  
 s3.putObject(outputBucket,outputFile,input,metaData);

这就是我将文件写入Amazon S3的方式。但是,我需要在ArrayList上写String s3 ArrayList。我无法浏览String并将其字符串数据附加到String,然后将其写入s3。为什么?因为StringBuffer无法容纳那么多内容。它与StringBuilderArrayList相同。稍后阶段,我相信我必须将此LinkedList转换为append

那么,无论如何我可以将BufferedWriter数据放入s3对象中吗?就像{{1}}?

一样

1 个答案:

答案 0 :(得分:0)

我不知道这是否适合您的情况:

也许某个地方你可以找到一个更好的类(并且经过更好的测试)来做到这一点,但作为一个例子,这里是一个从字符串列表中读取数据的Reader:

class SReader extends Reader{
    private Iterator<String> iterator;
    private String currentLine;
    public SReader(List<String> list){
        this.iterator = list.iterator();
        if(iterator.hasNext()){
            this.currentLine = iterator.next();
        }
    }

    @Override
    public int read(char[] cbuf, int off, int len) throws IOException {
        if(!iterator.hasNext() && currentLine.isEmpty()){
            return -1;
        }

        char c;int j = 0;
        for(int i = 0; i<len; i++){
            if(j < currentLine.length()){
                c = currentLine.charAt(j);
                j++;
            }
            else{
                if(!iterator.hasNext()){
                    return i;
                }
                j = 0;
                currentLine = iterator.next();
                c = '\n';//currentLine.charAt(j);
            }
            cbuf[off + i] = c; 
        }
        currentLine =currentLine.substring(j);                      

        return len;
    }

    @Override
    public void close() throws IOException {
    }
}

您可以在代码中使用它:

List<String> d = Arrays.asList("asdasdasdasdasd", "asdasdasdas", "dasdasda", "dasdasassssssssssssssssssssssssssssssssssssssssssss");
int length = 0;
for(String s : d){
    length += s.length() + 1; //I assume you want  \n after each line
}

InputStream input = new ReaderInputStream(new SReader(d));

ObjectMetadata metaData = new ObjectMetadata();
metaData.setContentLength(length);  
s3.putObject(outputBucket,outputFile,input,metaData);

希望它有所帮助。