代码之家  ›  专栏  ›  技术社区  ›  user2177334

从InputStream读取直到双引号

  •  0
  • user2177334  · 技术社区  · 13 年前

    需要帮助从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条件是个问题,当然引号是 String 虽然 int 应为。

    1 回复  |  直到 13 年前
        1
  •  2
  •   Bernhard Barker    13 年前

    "\"" 是字符串。如果您只想要的字符表示 " 使用 '"' 相反

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

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

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

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

    此外,您还错过了一项任务:

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

    应该是

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