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。
我想出了这段代码来发出每段带有分隔符的文本文件,但是第一个发出的字符串开头有一个双问号,
真不知道这个双问号是哪里来的
例如这是我的文本文件内容
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。