جافا - هل من الممكن قراءة سطر ملف سطرا، توقف، ثم تبدأ على الفور القراءة بايت حيث توقفت؟

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

سؤال

وأواجه مشكلة في محاولة لتحليل جزء أسكي من ملف، وبمجرد أن تصل إلى وسم النهاية، بدء فورا قراءة في بايت من تلك النقطة. أنا أعرف كل شيء في جافا لقراءة قبالة خط أو كلمة بأكملها يخلق منطقة عازلة، والذي يدمر أي فرصة للحصول على وحدات البايت مباشرة بعد نقطة توقف بلدي. هي الطريقة الوحيدة للقيام بذلك قراءة في البايت بواسطة البايت، والعثور على خطوط جديدة، إعادة بناء كل شيء قبل الخط الجديد، معرفة ما اذا كان بلدي وسم النهاية، والذهاب من هناك؟

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

المحلول

ما هو حجم هذا الملف؟ فكرتي الأولى هي لقراءة كل شيء في ByteBuffer أو ByteArrayOutputStream دون محاولة معالجة ذلك، ثم تحديد العلامة بمقارنة القيم بايت. بمجرد أن تعرف أين ينتهي جزء النص والجزء ثنائي تبدأ، لمعالجة كل جزء حسب الاقتضاء.

نصائح أخرى

ومن الممكن، ولكن كما بقدر ما أعرف ليس مع الفئات من API.

ويمكنك القيام بذلك يدويا - فتح بأنها <لأ href = "http://java.sun.com/javase/6/docs/api/java/io/BufferedInputStream.html" يختلط = "noreferrer نوفولو" > BufferedInputStream ، الذي يدعم mark / reset. تقرأ قطعة قطعة (byte[]) وكنت تحليل أنها ASCII. في نهاية المطاف كنت تتراكم في منطقة عازلة حتى تصل إلى علامة. ولكن قبل أن read استدعاء mark. إذا كنت تعتقد أنك قرأت كل ما تحتاج في ASCII، يمكنك استدعاء reset ثم استدعاء read لتفريغ ما تبقى من الجزء ASCII. والآن لديك BufferedInputStream (والذي هو InputStream) جاهزة للقراءة الجزء ثنائي من الملف.

وأعتقد أن أفضل فكرة أن يكون للتخلي عن مفهوم "الخطوط". العثور على وسم النهاية، إنشاء حلقة العازلة هذا يكفي مجرد كبيرة لاحتواء علامة النهاية، قراءة في ذلك البايت بواسطة البايت، وبعد كل شيك بايت إذا كان يحتوي على علامة.

وهناك خوارزميات البحث أكثر تطورا وكفاءة، ولكن الفرق هو ذات الصلة فقط مع مصطلحات البحث أطول (ويفترض وسم النهاية الخاص قصيرة).

نعم، أنت على حق حول البايت بواسطة البايت. التجريد له سلبياته.

هل الملف النمو، أم أنه ثابت؟

إذا انها ثابتة، انظر HTTP: // java.sun.com/javase/6/docs/api/java/nio/MappedByteBuffer.html

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