Tôi có một số mã python rằng:Viết một đệm nhị phân vào một tập tin trong python
- Mất một BLOB từ một cơ sở dữ liệu đã được nén.
- Gọi một thường trình không nén trong C giải nén dữ liệu.
- Ghi dữ liệu chưa nén vào tệp.
Sử dụng ctypes để gọi thường trình C, trong thư viện được chia sẻ.
Điều này chủ yếu hoạt động, ngoại trừ việc ghi thực tế vào tệp. Để giải nén, tôi nhận được dữ liệu không nén vào một bộ đệm python, tạo ra bằng cách sử dụng ctypes create_string_buffer
phương pháp:
c_uncompData_p = create_string_buffer(64000)
nên gọi uncompression là như thế này:
c_uncompSize = mylib.explodeCharBuffer (c_data_p, c_data_len, c_uncompData_p)
Kích thước của kết quả dữ liệu không nén được trả về dưới dạng giá trị trả lại.
Nhưng ... Tôi không có ý tưởng làm thế nào để buộc python trên chỉ viết c_uncompSize
byte ra - nếu tôi làm:
myfile.write (c_uncompData_p.raw)
nó viết toàn bộ 64k đệm ra (các dữ liệu nhị phân là - vì vậy nó không phải là null chấm dứt).
Vì vậy, câu hỏi của tôi là - bằng cách sử dụng Python 2,5 làm thế nào để tôi nhận được c_uncompSize byte in ra, chứ không phải là toàn bộ 64k?
Cảm ơn Jamie
tác phẩm cắt lát nhưng tôi nghi ngờ rằng nó tạo ra một bản sao của dữ liệu. Nó có thể hoặc có thể không quan trọng (64K là một con số tương đối nhỏ). – jfs
Cắt lát làm việc tốt và chạy tốt. Cảm ơn! –
Có thể sử dụng 'itertools.islice()' để tránh tạo bản sao dữ liệu, – martineau