2013-03-16 155 views
0

需要幫助從InputStream讀取字節列表直到引號。 問題是,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

的'InputStream'不能包含引號。 InputStream處理*字節*,引號是*字符*。你需要弄清楚你是在處理二進制數據還是字符數據。如果你正在處理字符數據,你應該使用'Reader'。 – 2013-03-16 15:45:29

回答

2

"\""是一個字符串。如果您只想要"的字符表示,請改爲使用'"'

注意,當你想到,如果你的文件不是ASCII格式(和行爲會有所不同字符集之間不一致),你的代碼將無法​​正常工作(當然,這也取決於你所期望的)。

如果在ASCII中,每個字符將在文件中佔用一個字節,並且InputStream::read()讀取一個字節(因此是單個ASCII字符),所以一切都會正常工作。

如果在每個字符(例如Unicode)佔用超過1個字節的字符集中,每次讀取的內容將少於一個字符,並且您的代碼可能無法按預期工作。

Reader::read()(並且使用Character而不是Byte),因爲它會讀取字符,而不僅僅是字節。

而且,你錯過了一個任務:

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

應該

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

thnx很多我現在得到它:) – user2177334 2013-03-17 08:06:28

+0

@ user2177334如果您發現它有幫助,請記住[upvote and/or accept](http://meta.stackexchange.com/a/168143/206447)這個答案。 – Dukeling 2013-03-17 11:52:43