3 回答

TA貢獻1898條經驗 獲得超8個贊
在這個地方:
while(bufferedReader.readLine() != null){
stringBuffer.append(bufferedReader.readLine())
}
你readLine先打電話兩次來檢查它是否不為空,然后追加到stringBuffer. 但實際上,第二個電話得到了另一條線路,所以你每隔一行就輸一次。
在 Java 中讀取緩沖流的常用方法是:
String line;
while ((line = r.readLine()) != null) {
// do your stuff...
}
但是 Scala 中的分配返回Unit所以它不會工作。
所以也許使用Stream.continually是可行的方法?
Stream
.continually(bufferedReader.readLine())
.takeWhile(_ != null)
.foreach(stringBuffer.append)

TA貢獻1834條經驗 獲得超8個贊
我知道這不是您要找的東西,但數據操作有時會非常復雜,尤其是當您涉及網絡時。因此,為了簡單起見,我建議使用外部庫JSON從URL.
以下代碼使用JSON.simple和Apache Commons IOJSON提供的方法從您提供的鏈接中檢索您的文件:
public void getJson() throws IOException {
java.net.URL url = new java.net.URL("https://jsonplaceholder.typicode.com/todos/1");
String json = IOUtils.toString(url, Charset.forName("UTF-8"));
System.out.println(json);
}

TA貢獻1773條經驗 獲得超3個贊
readLine 被調用了兩次,InputStreamReader 應該使用源的字符集。這里我采用了 ISO-8859-1,因為它不會像 UTF-8 那樣給出錯誤。readLine 也刪除了行結尾,而 StringBuilder 更快。
val streamReader: InputStreamReader = new InputStreamReader(httpsConnection.getInputStream,
"ISO-8859-1")
val bufferedReader = new BufferedReader(streamReader)
val stringBuilder: StringBuilder = new StringBuilder()
while (true) {
val line = bufferedReader.readLine();
if (line == null) {
break;
}
stringBuilder.append(line).append("\r\n");
}
添加回答
舉報