मैं आईबीएम वेबस्पेयर एप्लिकेशन सर्वर v6 और जावा 1.4 का उपयोग कर रहा हूं और उपयोगकर्ता को डाउनलोड करने के लिए ServletOutputStream
पर बड़ी सीएसवी फाइलें लिखने की कोशिश कर रहा हूं। इस समय फाइलें 50-750 एमबी से हैं।सर्विसलेट के बिना जावा सर्वलेट में बहुत बड़ी फ़ाइलों को लिखने के लिए ServletOutputStream का उपयोग
छोटी फाइलें समस्या का बहुत अधिक कारण नहीं बन रही हैं लेकिन बड़ी फ़ाइलों के साथ ऐसा लगता है कि यह ढेर में लिखा जा रहा है जो तब आउटऑफमेमरी त्रुटि उत्पन्न कर रहा है और पूरे सर्वर को नीचे ला रहा है।
इन फ़ाइलों को केवल HTTPS पर प्रमाणीकृत उपयोगकर्ताओं को ही सेवा दी जा सकती है, यही कारण है कि मैं उन्हें अपाचे में चिपकाने के बजाय Servlet के माध्यम से उनकी सेवा कर रहा हूं।
कोड मैं का उपयोग कर रहा है (कुछ फुलाना इस चारों ओर निकाला गया) है:
resp.setHeader("Content-length", "" + fileLength);
resp.setContentType("application/vnd.ms-excel");
resp.setHeader("Content-Disposition","attachment; filename=\"export.csv\"");
FileInputStream inputStream = null;
try
{
inputStream = new FileInputStream(path);
byte[] buffer = new byte[1024];
int bytesRead = 0;
do
{
bytesRead = inputStream.read(buffer, offset, buffer.length);
resp.getOutputStream().write(buffer, 0, bytesRead);
}
while (bytesRead == buffer.length);
resp.getOutputStream().flush();
}
finally
{
if(inputStream != null)
inputStream.close();
}
FileInputStream
के रूप में अगर मैं एक फ़ाइल पर लिखने या बस पूरी तरह से लिखने को दूर एक समस्या उत्पन्न कर नहीं लगता है स्मृति उपयोग एक समस्या प्रतीत नहीं होता है।
मैं क्या सोच रहा हूं कि resp.getOutputStream().write
को स्मृति में संग्रहीत किया जा रहा है जब तक कि डेटा क्लाइंट के माध्यम से नहीं भेजा जा सके। इसलिए पूरी फ़ाइल को resp.getOutputStream()
में पढ़ा और संग्रहीत किया जा सकता है जिससे मेरी मेमोरी समस्याएं और क्रैश हो रही है!
मैं इन धाराओं बफ़रिंग की कोशिश की है और यह भी java.nio
, मेरी स्मृति मुद्दों के अंतर के किसी भी बिट कर रहा है जिनमें से कोई भी से चैनल उपयोग करने की कोशिश। लूप के प्रति पुनरावृत्ति के बाद और लूप के बाद, मैंने मदद नहीं की, OutputStream
भी फ्लश किया है।
कोशिश इस Websphere वेब कंटेनर कस्टम गुण की स्थापना - com.ibm.ws.webcontainer.channelwritetype = सिंक विवरण यहां हैं - http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/ index.jsp? topic =/com.ibm.websphere.express.doc/info/exp/ae/rweb_custom_props.html –