rxjava-string 上的双问号是什么意思?

what double question mark on rxjava-string means?

我想出了这段代码来发出每段带有分隔符的文本文件,但是第一个发出的字符串开头有一个双问号,

真不知道这个双问号是哪里来的

例如这是我的文本文件内容

test.txt

pieceOne;pieceTwo;pieceThree;

这是我在控制台中使用 ; 分隔符的输出:

??pieceOne    
pieceTwo    
pieceThree

这是我的代码:

public Observable<String> readFile(String filePath, String delimiter) {
        return Observable.just(filePath)
                .map(Paths::get)
                .map(this::safeInitializeInputStream)//just initialize inputstream here
                .flatMap(in -> readInputStream(in, delimiter))
                .observeOn(scheduler);
    }

private Observable<String> readInputStream(InputStream is, String delimiter) {
        return StringObservable
                .split(StringObservable.from(new InputStreamReader(is,
                        Charset.forName("UTF-8"))), delimiter);
    }

如有任何想法,我们将不胜感激。

我没找到你用过的 class 'StringObservable'。我改为使用

compile "com.github.akarnokd:rxjava2-extensions:0.17.0"

我觉得??是因为有两个字节不能用UTF-8表示。

@Test
void name() {
    // pieceOne;pieceTwo;pieceThree;
    readFile("/home/sergej/Desktop/wurstdatei", ";")
            .test()
            .assertValues("pieceOne", "pieceTwo", "pieceThree");
}

private Observable<String> readFile(String filePath, String delimiter) {
    return Observable.just(filePath)
            .map(Paths::get)
            .map(path -> Files.newInputStream(path))
            .flatMap(in -> readInputStream(in, delimiter))
            .observeOn(Schedulers.io());
}

private Observable<String> readInputStream(InputStream is, String delimiter) {
    return Flowable.just(new BufferedReader(new InputStreamReader(is)))
            .scan("", (s, bufferedReader) -> bufferedReader.readLine())
            .compose(StringFlowable.split(delimiter))
            .toObservable();
}

(从评论中复制)

文件很可能来自 Windows 机器,由 notepad.exe 保存为 UTF-16,前两个字符是 "byte order mark",又名 BOM。它们通常必须是 0xff 0xfe。签入十六进制查看器。

如果其余数据为 ASCII,则可以安全地省略这些字节。如果不是,则必须从 UTF-16 正确解码;解码器将处理 BOM。