0

需要帮助从 InputStream 读取到引号之前的字节列表。问题是, InputStream 读取字节,我不知道当它到达引号时如何停止读取......我想过这样的事情:

public static List<Byte> getQuoted(InputStream in) throws IOException {
    int c;
    LinkedList<Byte> myList = new LinkedList<>();
    try {
    while ((in.read()) != "\"") {   ?????
        list.add(c)
    .....

while 条件是有问题的,当然引号是Stringwhileint是意料之中的。

4

1 回答 1

2

"\""是一个字符串。如果您只想要 的字符表示",请'"'改用。

请注意,如果您的文件不是 ASCII 格式(并且不同字符集之间的行为将不一致),您的代码将无法按预期工作(它当然取决于您的预期)。

如果在 ASCII 中,每个字符将占用文件中的一个字节并InputStream::read()读取一个字节(因此是一个 ASCII 字符),所以一切都会正常工作。

如果在每个字符占用超过 1 个字节的字符集中(例如 Unicode),每次读取将读取不到一个字符,并且您的代码可能无法按预期工作。

Reader::read()(并且使用Character而不是Byte)建议,因为它会读取一个字符,而不仅仅是一个字节。

另外,你错过了一个任务:

while ((in.read()) != '"')

应该

while ((c = in.read()) != '"')
于 2013-03-16T16:04:50.730 回答