سؤال

أنا أستخدم java.util.scanner للأشياء مثل nextint ()، وكان كل شيء يعمل بشكل جيد طالما كنت أستخدم java.lang.readable (وسيطة منشئ واحدة فقط). ومع ذلك، عندما غيرت لاستخدام Inputstream بدلا من ذلك، ماسح الضوئي.إعادة () لا تعود أبدا. هل تعرف لماذا؟

يشبه تطبيقي للمدخلات مثل هذا:

private static class ConsoleInputStream extends InputStream {
    ...
    private byte[] buffer;
    private int bufferIndex;
    public int read() throws IOException {
        ...
        while (...) {
            if (buffer != null && bufferIndex < buffer.length) {
                return buffer[bufferIndex++];    // THE COMMENT!
            }
            ...
        }
        ...
    }
}

عندما أقوم بطباعة البيانات عن طريق التعليق، احصل على أشياء مثل "1"، "2"، " n" ل "12 n"، إلخ. هل هناك بعض التوقيف الماسح الضوئي، غير معروف بي، وهذا يسبب هذا السلوك ب

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

المحلول

من Javadocs للحصول على طريقة INPUTSTREAM ():

"إرجاع: البايت التالي من البيانات، أو -1 إذا تم الوصول إلى نهاية الدفق".

أعتقد أنك لا تعود أبدا -1؟

نصائح أخرى

أعتقد أن المشكلة مع Inputstream التي تم إنشاؤها بنفسك. لماذا بناء بنفسك، بدلا من مجرد استخدام System.IN؟

تحديث:

مطلوب المدخلات من jtextfield.

حسنا، حصلت عليه. عادة ما لا معنى له في استخدام I / O الذي يتمكن من قراءة الأشياء التي تتوفر بالفعل، في شكل حرف، ولكن يمكنني أن أرى كيف من شأنها أن تجعل حياتك أسهل مع الماسح الضوئي.

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

InputStream is = new ByteArrayInputStream(myTextField.getText().getBytes());

Java I / O هو Yucky. كن سعيدا لأن الأشخاص المشرقين من الشمس قد أغلقوا معظمها بعيدا عنك.

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