ما هو أفضل مخزن مؤقت للبايت دائري يمكن تغيير حجمه ومتوفر في Java؟

StackOverflow https://stackoverflow.com/questions/325602

  •  11-07-2019
  •  | 
  •  

سؤال

أحتاج إلى فئة المخزن المؤقت للبايت في Java للاستخدام المفرد.يجب أن أكون قادرًا على إدراج البيانات في الجزء الخلفي من المخزن المؤقت وقراءة البيانات في المقدمة بتكلفة مطفأة قدرها O(1).يجب تغيير حجم المخزن المؤقت عندما يكون ممتلئًا، بدلاً من طرح استثناء أو شيء من هذا القبيل.

يمكنني أن أكتب واحدة بنفسي، لكنني سأكون مندهشًا للغاية إذا لم يكن هذا موجودًا بعد في حزمة Java القياسية، وإذا لم يكن الأمر كذلك، أتوقع وجوده في بعض المكتبات العامة التي تم اختبارها جيدًا.

ماذا تنصح؟

هل كانت مفيدة؟

المحلول

لست متأكدًا مما إذا كان "الأفضل"، ولكن لديك مثال جيد عليه المخزن المؤقت بايت دائري هنا.

أولئك أدوات جافا - OstermillUtils الطبقات تحت ترخيص جي بي إل.

يقوم هذا المخزن المؤقت للبايت الدائري بتنفيذ نموذج المنتج/المستهلك للمخزن المؤقت الدائري للبايتات.يتم ملء وتفريغ المخزن المؤقت باستخدام Java InputStreams وOutputStreams القياسيين.

يعد استخدام هذه الفئة بديلاً أبسط لاستخدام PipedInputStream وPipedOutputStream.
لا يدعم PipedInputStreams وPipedOutputStreams عملية وضع العلامات، ولا يسمحان لك بالتحكم في أحجام المخزن المؤقت التي يستخدمونها، كما أن لديهم واجهة برمجة تطبيقات أكثر تعقيدًا تتطلب إنشاء فئتين وربطهما.

نصائح أخرى

وأنا أتساءل عما إذا كان هذا واحد يعمل بشكل جيد

<وأ href = "https://svn.apache.org/repos/asf/etch/releases/release-1.0.0/util/src/main/java/etch/util/CircularByteBuffer.java" يختلط = "نوفولو"> https://svn.apache.org/repos/asf/etch/releases/release-1.0.0/util/src/main/java/etch/util/CircularByteBuffer.java

ونحن من المحتمل أن هذه محاولة واحدة لأنها رخصة أباتشي.

وأنا باستخدام java.util.ArrayDeque<Byte> في مشروع مع متطلبات مماثلة. لاحظ أنه يمكنك بسهولة تغيير التنفيذ باستخدام Queue java.util.concurrent التنفيذ.

وكنت قد كتبت مثل هذه الفئة: ByteRingBuffer

وانه لا تغيير حجم تلقائيا، ولكن هناك طريقة تغيير الحجم ().

وهو "المجربة" إنه مع برنامج اختبار تلقائي، يستخدم أرقام عشوائية لاختبار جميع الحالات الممكنة.

وهناك حل آخر هو استخدام <لأ href = "http://www.jboss.org/jbossremoting/docs/api/org/jboss/remoting/transport/multiplex/utility/GrowablePipedOutputStream.html" يختلط = "نوفولو noreferrer "> GrowablePipedOutputStream و <لأ href =" http://www.jboss.org/jbossremoting/docs/api/org/jboss/remoting/transport/multiplex/utility/GrowablePipedInputStream.html "يختلط =" نوفولو noreferrer "> GrowablePipedInputStream التي كتبها جبوس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top