तो मैं उपयोगकर्ताओं से संदेशों को एक संदेश नेटवर्क पर संदेशों को लिखने की कोशिश कर रहा हूं। मैं इस कार्यक्रम को अच्छे जावा प्रथाओं और उचित फ़ाइल आईओ तकनीक के साथ बनाने की कोशिश कर रहा हूं।क्या फ़ाइल में सहेजने से पहले कैश में समय-समय पर अधिग्रहण किया गया बहुत सारे टेक्स्ट को स्टोर करना अच्छा विचार है?
वर्तमान में मेरा प्रोग्राम पहचानता है कि किसी ने संदेश पोस्ट किया है, संदेश लेता है और तुरंत इसे फ़ाइल में लिखता है। फ़ाइल ऑब्जेक्ट बनाना, लेखक ऑब्जेक्ट बनाना, संदेश जोड़ना, फिर फ़ाइल को बंद कर देता है। अगर ऐसा कोई संदेश नहीं आ रहा है तो यह अच्छा अभ्यास प्रतीत होता है, लेकिन अगर वार्तालाप की एक तेज धारा है तो यह धीमा लगता है और इसके लिए बहुत कुछ चाहिए अनावश्यक कार्यों की वजह से फ़ाइल फिर से खोला जा रहा है।
तब मैंने सोचा कि अगर मैंने फ़ाइल को अभी खुला छोड़ दिया है और संदेशों को लिखा है जैसे वे फ़ाइल में आए हैं, तो इसे समय-समय पर बंद कर दें। क्या यह अच्छा अभ्यास है? विस्तारित अवधि के लिए एक फ़ाइल खोलने के लिए? उदाहरण के लिए एक घंटे के बाद या कुछ मात्रा में डेटा लिखा गया है?
अब, मुझे लगता है कि मुझे संदेश लेना चाहिए, उन्हें "कैश" (एक स्ट्रिंग सरणी की तरह) में स्टोर करना चाहिए, फिर "कैश" भरने पर स्ट्रिंग सरणी को फ़ाइल में सहेजें। क्या यह बेहतर अभ्यास है?
तो मैं दो प्रश्न हैं:
1) यदि आप फ़ाइल का उपयोग नहीं कर रहे हैं एक फ़ाइल खुला समय की एक विस्तारित अवधि के लिए (कुछ ही घंटों के लिए कुछ मिनट) छोड़ने के लिए अच्छा अभ्यास है?
2) "कैश" के लिए अच्छा अभ्यास क्या है जैसे मैं बात कर रहा हूं? एक स्ट्रिंग सरणी अच्छा है? क्या मुझे कुछ बेहतर उपयोग करना चाहिए? आप इस जानकारी को संग्रहीत करने के बारे में कैसे जाएंगे?
> सर्वर अनुप्रयोगों में लॉग (और इसी तरह) के लिए सर्वोत्तम अभ्यास स्वीकार्य समय देरी का निर्णय लेना और इसके साथ चिपकना है। क्या आप इसे कैसे कर सकते हैं इस बारे में विस्तार से बता सकते हैं? या मुझे यह जानने के लिए दिशा में इंगित करें कि यह कैसे करें? इसके अलावा, BuffereOutputStream का उपयोग करने के तरीके के बारे में कुछ और जानकारी अच्छी होगी। मैं इसे सही तरीके से उपयोग करने की कोशिश कर रहा हूं। क्या अन्य कक्षाएं शामिल होनी चाहिए? फ्लश() विधि का उपयोग करने के बारे में मैं कैसे सीखूं। यह भी एक अच्छा जवाब था धन्यवाद। – Bnannerz
BufferedOutputStream बहुत आसान है; जैसे कि आपके पास FileOutputStream बुलाया गया है, बस नया BufferedOutputStream (आउट) करें और इसका उपयोग करें जैसे आप FileOutputStream करेंगे। यदि आप लेखकों का उपयोग कर रहे हैं, तो एक BufferedWriter है। दूसरा पैरामीटर बफर बनाने के लिए कितना बड़ा है; डिफ़ॉल्ट काफी छोटा है लेकिन जहां तक मुझे पता है कि आप इसे 8 केबी या 64 केबी या जो कुछ भी पसंद कर सकते हैं। – sam
समय की बात कैसे करें - यह काफी सरल है लेकिन इसमें समवर्तीता शामिल है, इसलिए आपको स्थानों में सिंक्रनाइज़ किए गए कीवर्ड का उपयोग करना होगा! असल में, अपने 'फ़ाइल में लिखें' फ़ंक्शन है ताकि यह buffered आउटपुट स्ट्रीम को लिख सके। जांचें कि क्या आपके पास पहले से लंबित 'फ्लश' टाइमर है या नहीं। यदि कोई है, तो कुछ भी नहीं; यदि नहीं, तो एक नया धागा शुरू करें जो सिर्फ 5 सेकंड (या जो कुछ भी) के लिए सोता है, फिर स्ट्रीम पर फ्लश कॉल करता है। (कॉलिंग फ्लश() बफर को साफ़ कर देगा और वास्तव में इसे डिस्क पर लिख देगा।) – sam