了解writeDataToPipe

时间:2012-12-05 09:26:59

标签: java android design-patterns

我在最新的Android记事本教程link中找到了此代码段,该教程使用的是contentprovider并实现了PipeDataWriter。

接口的方法是writeDataToPipe,它们实现如下:

@Override
public void writeDataToPipe(ParcelFileDescriptor output, Uri uri, String mimeType, Bundle opts, Cursor c) {
    // We currently only support conversion-to-text from a single note entry,
    // so no need for cursor data type checking here.
    FileOutputStream fout = new FileOutputStream(output.getFileDescriptor());
    PrintWriter pw = null;
    try {
        pw = new PrintWriter(new OutputStreamWriter(fout, "UTF-8"));
        pw.println(c.getString(READ_NOTE_TITLE_INDEX));
        pw.println("");
        pw.println(c.getString(READ_NOTE_NOTE_INDEX));
    } catch (UnsupportedEncodingException e) {
        Log.w(TAG, "Ooops", e);
    } finally {
        c.close();
        if (pw != null) {
            pw.flush();
        }
        try {
            fout.close();
        } catch (IOException e) {
        }
    }
}

我怀疑他们为什么特别使用PipeDataWriter?

这是某种设计模式吗?

我发现没有使用它的其他来源。为什么这样?

1 个答案:

答案 0 :(得分:3)

  

为什么他们特意使用PipeDataWriter?

他们在openPipeHelper()的实施中使用openTypedAssetFile()openPipeHelper()PipeDataWriter作为参数。在他们的情况下,他们在PipeDataWriter本身上实施了NotePadProvider,因此需要实施openPipeHelper()来履行PipeDataWriter界面所需的合同。

PipeDataWriteropenPipeHelper()是API级别11的新手。以前,您必须使用自己的解决方案来分支线程以返回文件内容。