Tôi tìm một ví dụ về cách áp dụng biểu thức chính quy cho luồng I/O Java không chỉ chuyển đổi luồng thành chuỗi như tôi muốn bảo toàn dữ liệu nhị phân. Hầu hết các ví dụ trên Internet tập trung vào dữ liệu văn bản ...Áp dụng cụm từ thông dụng vào luồng I/O Java
Trả lời
Chuyển đổi luồng thành mảng byte.
Cần lưu ý rằng điều này chỉ có ý nghĩa nếu đầu vào có thể được tải vào bộ nhớ trong cả hai điều khoản về kích thước của nó và thời gian cần thiết cho việc tải! Điều đó có nghĩa là bạn cần phải biết lengh của dữ liệu được cung cấp bởi các dòng để viết một chương trình đáng tin cậy. Biết được độ dài đầu vào của một luồng mâu thuẫn với mục đích của nó để cung cấp dữ liệu có khả năng bất tận! –
Hoạt động regex phải được thực hiện trên các chuỗi, là các byte được mã hóa dữ liệu nhị phân. Bạn không thể thực hiện các hoạt động regex trên các byte dữ liệu mà bạn không biết chúng đại diện cho những gì.
-1 Tôi không đồng ý. Không có lý do tại sao bạn không thể áp dụng biểu thức chính quy cho dữ liệu nhị phân. Dữ liệu nhị phân không có nghĩa là bạn không có ý tưởng về những gì chúng đại diện. –
Giả sử, bạn có thể lấy luồng 0 và 1 và thực hiện regex trên đó. Tuy nhiên, không có API Java nào hiện có cung cấp cho bạn quyền truy cập vào luồng thô đó mà không chuyển đổi nó thành một cái gì đó có ý nghĩa hơn. –
+1 đồng ý, Áp dụng regexp trên dữ liệu nhị phân không có ý nghĩa. Regexps về cơ bản là hướng tới các chuỗi, chúng được định nghĩa bằng cách sử dụng Strings, vì vậy bạn sẽ luôn sử dụng mã hóa chuỗi, một cách rõ ràng hoặc ngầm. –
Chức năng cần thiết không có trên Tiêu chuẩn Java. Bạn sẽ phải sử dụng jakarta regexp và cụ thể là lớp StreamCharacterIterator. Lớp này gói gọn một InputStream để sử dụng trong các hoạt động regexp.
Nếu bạn muốn sử dụng gói biểu thức chính quy chuẩn, tôi khuyên bạn nên lấy nguồn từ lớp trước here và thay đổi hợp đồng bằng cách thực hiện CharSequence thay vì CharacterIterator.
Một vấn đề với việc thực hiện CharSequence là giao diện yêu cầu lớp để thực hiện 'chiều dài int công cộng()'. Nếu bạn đang đọc từ một luồng, thì bạn sẽ không biết độ dài và sẽ không thể trả lời câu trả lời cho công cụ regex. – monkeysplayingpingpong
Hãy thử sử dụng Ragel - công cụ biểu thức chính quy với chuyển tiếp cuộc gọi lại.
Có thể áp dụng cho các luồng và đoạn.
- 1. cụm từ thông dụng trên luồng thay vì chuỗi?
- 2. Java; Chuỗi thay thế (sử dụng cụm từ thông dụng)?
- 3. Cụm từ thông dụng để khớp URL trong Java
- 4. Cụm từ thông dụng tốt là gì?
- 5. Sử dụng cụm từ thông dụng trong css?
- 6. Cụm từ thông dụng và GWT
- 7. Làm cách nào để áp dụng "bộ lọc" dựa trên cụm từ thông dụng?
- 8. Thêm char đặc biệt vào cụm từ thông dụng?
- 9. cụm từ thông dụng "chứa" một cụm từ thông dụng khác
- 10. cụm từ thông dụng \ Z (? Ms)
- 11. Unicode, cụm từ thông dụng và PyPy
- 12. Cụm từ thông dụng trong OCaml
- 13. .NET BindingSource.Filter với cụm từ thông dụng
- 14. Cụm từ thông dụng trong findstr
- 15. cụm từ thông dụng cho DOT
- 16. Cụm từ thông dụng C++ Qt
- 17. Tham gia các cụm từ thông dụng
- 18. Cụm từ thông dụng trong C
- 19. Thoát biến trong Cụm từ thông dụng
- 20. Cụm từ thông dụng trong DB2 SQL
- 21. Cụm từ thông dụng trong Bash Script
- 22. Tại sao cụm từ thông dụng được gọi là cụm từ "thông thường"?
- 23. Thuật toán cụm từ thông dụng nào sử dụng PHP?
- 24. Sử dụng cụm từ thông dụng với C++ trên Unix
- 25. Chuỗi phát nổ PHP sử dụng cụm từ thông dụng
- 26. Cách sử dụng cụm từ thông dụng trong xxml xpath?
- 27. Bộ chọn jQuery: chứa - Sử dụng cụm từ thông dụng
- 28. Sử dụng cụm từ thông dụng để so sánh số
- 29. Hiệu ứng của "*" trong cụm từ thông dụng là gì?
- 30. Tại sao các cụm từ thông dụng này thực thi chậm trong Java?
Bạn đang tìm kiếm điều gì? Từ chối dữ liệu không khớp với regexp? Và những gì bạn muốn để phù hợp trên nếu bạn không quan tâm đến chuỗi? Một số làm rõ sẽ là tốt –
Chỉ cần làm rõ: Một chuyển đổi cho các ký tự và trở lại dữ liệu nhị phân có thể có tác động hiệu suất nhưng không một byte nào sẽ bị mất do chuyển đổi. – rwitzel
có thể trùng lặp của [Thực hiện regex trên luồng] (http://stackoverflow.com/questions/3013669/performing-regex-on-a-stream) –