"thích hợp" khi viết vòng lặp đọc chuẩn trong Scala là gì? Theo đúng nghĩa tôi đã được viết theo cách giống như Scala như trái ngược với một cách giống như Java.Cách thích hợp để mã hóa một vòng lặp đọc trong Scala là gì?
Đây là mã tôi có trong Java:
MessageDigest md = MessageDigest.getInstance("MD5");
InputStream input = new FileInputStream("file");
byte[] buffer = new byte[1024];
int readLen;
while((readLen = input.read(buffer)) != -1)
md.update(buffer, 0, readLen);
return md.digest();
Đây là mã tôi có trong Scala:
val md = MessageDigest.getInstance(hashInfo.algorithm)
val input = new FileInputStream("file")
val buffer = new Array[ Byte ](1024)
var readLen = 0
while(readLen != -1)
{
readLen = input.read(buffer)
if(readLen != -1)
md.update(buffer, 0, readLen)
}
md.digest
Mã Scala là chính xác và hoạt động, nhưng cảm thấy rất un-Scala -. Đối với một nó là một bản dịch chữ của mã Java, lợi dụng không có lợi thế của Scala. Hơn nữa nó thực sự dài hơn mã Java! Tôi thực sự cảm thấy như tôi đang thiếu một cái gì đó, nhưng tôi không thể tìm ra những gì.
Tôi khá mới đối với Scala và vì vậy tôi đặt câu hỏi để tránh rơi vào cạm bẫy khi viết mã kiểu Java trong Scala. Tôi quan tâm nhiều hơn đến cách Scala để giải quyết loại vấn đề này hơn bất kỳ phương thức trợ giúp cụ thể nào có thể được API Scala cung cấp để băm một tệp.
(Tôi xin lỗi trước cho quảng cáo hoc Scala tính từ của tôi trong suốt câu hỏi này.)
Câu trả lời của tôi cho http://stackoverflow.com/questions/2849303 có thể hữu ích. –
@Rex Tôi muốn sử dụng 'Iterator' thay vì' Stream'. Sau khi tất cả, nó _is_ một shot và không tái sử dụng được. Bên cạnh đó, 'Iterator' có hiệu suất bộ nhớ tốt hơn trong các nhiệm vụ như vậy. –
@Daniel - Đồng ý. Tôi tin rằng có một số lý do chính đáng tại một thời điểm nào đó tại sao tôi lại sử dụng 'Stream' trước đây, nhưng tôi không thể nhớ lại những gì (và tôi không nghĩ nó vẫn đúng). Bất kể, ở đây 'Iterator.continually' sẽ ổn thôi. –