- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
我调用了一个返回压缩文件的服务。我从响应中将数据作为 InputStream(由 javax.activation.DataHandler.getInputStream();
提供)提供。
我想做的是,在不向磁盘写入任何内容的情况下,获取存档文件中解压缩数据的 InputStream。在这种情况下,压缩文件是一个 xml 文档,我试图使用 javax.xml.bind.Unmarshaller
对其进行解码,它采用 InputStream。
我目前正在尝试将 InputStream 写入 OutputStream(解压缩数据),然后我需要将其写回 InputStream。它还没有用,所以我想我会看看是否有更好的(我希望如此)方法。
我可以将初始 InputStream 写入磁盘并获取 gz 文件,然后读取该文件,从中获取压缩文件并从那里开始,但我宁愿将其全部保存在内存中也是可能的。
更新 1:这是我当前的(不工作 - 得到“不是 GZIP 格式”的异常):
ByteArrayInputStream xmlInput = null;
thử {
InputStream in = dh.getInputStream(); //dh is a javax.activation.DataHandler
BufferedInputStream bis = new BufferedInputStream(in);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
int bytes_read = 0;
byte[] dataBuf = new byte[4096];
while ((bytes_read = bis.read(dataBuf)) != -1) {
bo.write(dataBuf, 0, bytes_read);
}
ByteArrayInputStream bin = new ByteArrayInputStream(bo.toByteArray());
GZIPInputStream gzipInput = new GZIPInputStream(bin);
ByteArrayOutputStream out = new ByteArrayOutputStream();
dataBuf = new byte[4096];;
bytes_read = 0;
while ((bytes_read = gzipInput.read(dataBuf)) > 0) {
out.write(dataBuf, 0, bytes_read);
}
xmlInput = new ByteArrayInputStream(out.toByteArray());
如果我第一次写入 FileOutputStream 而不是写入 ByteArrayOutputStream,我得到一个压缩文件(我可以手动打开它以获取其中的 xml 文件)并且服务 (eBay) 说它应该是一个 gzip 文件所以我不确定为什么会收到“不是 GZIP 格式”错误。
更新 2:我尝试了一些不同的东西 - 同样的错误(“不是 GZIP 格式”)。哇,我只是想用分号结束那个括号。无论如何,这是我的第二次尝试,但仍然无效:
ByteArrayInputStream xmlInput = null;
thử {
GZIPInputStream gzipInput = new GZIPInputStream(dh.getInputStream());
ByteArrayOutputStream bo = new ByteArrayOutputStream();
int bytes_read = 0;
byte[] dataBuf = new byte[4096];
while ((bytes_read = gzipInput.read(dataBuf)) != -1) {
bo.write(dataBuf, 0, bytes_read);
}
xmlInput = new ByteArrayInputStream(bo.toByteArray());
câu trả lời hay nhất
关于java - 如何从 GZIP 数据的 InputStream 中获取解压缩数据的 InputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1744290/
Tôi có hai phương thức trong một lớp: Private static inputStream getSongStream(String ip, String id){ try { U
Tôi đã tạo một lớp mới mở rộng inputStream và phải @Override read(). Tôi đang cố gắng sử dụng phương thức read(int b) nhưng khi tôi sử dụng nó lại chuyển sang phương thức read() và tôi không thể sử dụng các tham số, tôi
Tôi đang cố gắng viết một hàm sẽ chấp nhận một Dòng đầu vào có dữ liệu tệp nén và trả về một Dòng đầu vào khác có dữ liệu được giải nén. File nén sẽ chỉ chứa một file nên không cần tạo thư mục, v.v... Tôi đã thử
Tôi tự hỏi liệu có cách lý tưởng nào để xâu chuỗi nhiều luồng đầu vào thành một luồng đầu vào liên tục trong Java (hoặc Scala) hay không. Tôi cần nó để phân tích các tệp phẳng mà tôi tải qua mạng từ máy chủ FTP.
Điều tôi muốn làm là: mở inputStream của một tệp lớn, đọc nó theo khối 10MB, tải lên một khối, đọc khối tiếp theo. val chunkCount = Math.ceil(tổng
Tôi không biết hiểu thế nào: { if (inputStream **!= null**) { inputStream.close(); Từ ví dụ đó: public c
Tôi muốn biết liệu inputStream có trống không khi không sử dụng phương thức read(). Có cách nào để biết nó có trống mà không cần đọc không? Câu trả lời hay nhất Không, bạn không thể. inputStream được thiết kế để xử lý các tài nguyên từ xa, vì vậy trước khi thực sự đọc nó
Tôi đã tạo một trình nghe luồng đầu vào bluetooth và chỉ hỏi if(InputStream.isAvailable > 0) để kiểm tra xem có dữ liệu đến không, sau đó tạo một vòng lặp để lưu trữ dữ liệu đến vào int[] cho đến khi không còn nữa và nó hoạt động Hoàn hảo
Đây là luồng mã của tôi, nội dung tệp bị thiếu, tôi nghĩ có thể có vấn đề với dòng IOUtils.toByteArray(), vui lòng hướng dẫn điều gì thực sự đang xảy ra ở đây. Nội dung tệp bị mất: Dòng inputStream = someCl
Tôi bắt đầu với phản hồi của một yêu cầu HTTP: inputStream replyInputStream = reply.getEntityInputStream() Tôi cần gzip phản hồi này
Một người dùng tải một tệp lớn lên trang web của tôi và tôi muốn gzip tệp đó và lưu trữ nó trong một blob. Vì vậy, tôi có một Dòng đầu vào không nén và blob cần một Dòng đầu vào. tôi biết cách sử dụng
Tôi đang gọi một dịch vụ trả về một tệp nén. Tôi đang nhận dữ liệu từ phản hồi dưới dạng inputStream (được cung cấp bởi javax.activation.DataHandler.getInputStream(); ). Điều tôi muốn làm là
Tôi đang cố gắng nén một Dòng đầu vào và trả về một Dòng đầu vào: nén Đầu vào công khai (InputStream in){ // Đọc "trong
Gần đây tôi thấy mã trong Kotlin đọc toàn bộ nội dung của một inputStream thành một chuỗi, ví dụ: // input thuộc loại inputStream val baos = Byte
Tôi đang cố đọc Dòng đầu vào từ IHTTPSession.getInputStream() bằng mã sau đây nhưng mã này luôn đưa ra Ngoại lệ về thời gian chờ cắm. riêng tư
Như đã đề cập trong Cách sử dụng thiết bị chặn Jersey để nhận nội dung yêu cầu, tôi đang sửa đổi EntityInput trong ContainerRequestFilter
Tôi đang viết một ứng dụng cần trao đổi dữ liệu với thiết bị Bluetooth 2.1. Tôi đã làm điều đó nhiều lần, nhưng lần này có điều gì đó kỳ lạ đã xảy ra. Log.d("TAG", "connectToDevice");
Tôi chỉ đang tự hỏi liệu đây là ý tưởng hay hay ý tưởng tồi: inputStreamReader in = new inputStreamReader(socket.getInputStream());
Tôi đang phát triển một ứng dụng Android có Chế độ xem chứa nhiều phòng trưng bày. Nội dung của thư viện (bitmap) có màu đỏ từ Internet. Đối với thư viện đầu tiên, mọi thứ đều hoạt động tốt, nhưng khi cố tải xuống hình ảnh đầu tiên của thư viện thứ hai, Bitm
Trong Dart tôi muốn đọc BMP, vì vậy có thể là tệp LỚN. Tôi làm như thế này: var inputStream = imageFile.openInputStream();
Tôi là một lập trình viên xuất sắc, rất giỏi!