Tôi đã viết phương pháp sau đây để xem liệu tệp cụ thể có chứa các ký tự văn bản ASCII chỉ hoặc kiểm soát các ký tự ngoài điều đó. Bạn có thể lướt qua đoạn mã này, đề xuất các cải tiến và chỉ ra sự giám sát?Cách kiểm tra xem tệp có phải là nhị phân không?
Logic là như sau: "Nếu 500 byte đầu tiên của một tập tin chứa 5 hoặc nhiều ký tự điều khiển - báo cáo nó như là tập tin nhị phân"
cảm ơn bạn.
public boolean isAsciiText(String fileName) throws IOException {
InputStream in = new FileInputStream(fileName);
byte[] bytes = new byte[500];
in.read(bytes, 0, bytes.length);
int x = 0;
short bin = 0;
for (byte thisByte : bytes) {
char it = (char) thisByte;
if (!Character.isWhitespace(it) && Character.isISOControl(it)) {
bin++;
}
if (bin >= 5) {
return false;
}
x++;
}
in.close();
return true;
}
Đó là một bi kịch được đánh dấu là câu trả lời đúng, khi thuật toán này phân loại tệp chứa "this \ r \ nis \ r \ nonly \ r \ ntext" dưới dạng nhị phân. – Ingo
@Đúng đúng; nó sẽ là tốt hơn để kiểm tra một số tỷ lệ kiểm soát ký tự để không kiểm soát, và cũng để kiểm tra các trường hợp đặc biệt như ký tự kiểm soát phổ biến trong văn bản. Tôi còn rất trẻ khi tôi gõ câu trả lời này :) – Pointy