我要求逐行读取远程大csv文件(基本上是流式传输)。每次读取后我都想在db中保存记录。目前我通过下面的代码实现它,但我不确定它是否下载完整的文件并将其保存在jvm内存中。我认为不是。我可以使用一些java 8流功能以更好的方式编写此代码
URL url = new URL(baseurl);
HttpURLConnection urlConnection = url.openConnection();
if(connection.getResponseCode() == 200)
{
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String current;
while((current = in.readLine()) != null)
{
persist(current);
}
}
答案 0 :(得分:2)
首先,您应该使用try-with-resources statement在阅读完成后自动关闭您的信息流
下一个BufferedReader
的方法BufferedReader::lines
会返回Stream<String>
然后你的代码应该是这样的:
URL url = new URL(baseurl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if (connection.getResponseCode() == 200) {
try (InputStreamReader streamReader = new InputStreamReader(connection.getInputStream());
BufferedReader br = new BufferedReader(streamReader);
Stream<String> lines = br.lines()) {
lines.forEach(s -> persist(s)); //should be a method reference
}
}
现在由您自行决定代码是否更好,并且您认为不要将整个文件保留在JVM中是正确的。