سؤال

وأنا باستخدام MIDP 2.0 (JSR 118)، ولقد لاحظت فقط أنه لا يوجد أي قارئ لالسلاسل في J2ME.

لا أحد يعرف كيف كنت من المفترض أن قراءة سلاسل من InputStream أو InputStreamReader في منصة بطريقة مستقلة (أي بين اثنين جافا سكريبت الهواتف المحمولة من نماذج مختلفة)؟

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

المحلول

وبدلا من ذلك لديهم نظرة على DataInputStream.readUTF() .

لا يشترط أن السلسلة يتم قراءة قبالة InputStream يتم تشفيرها بشكل مناسب (كما في قبل المقابلة <لأ href = "http://java.sun.com/javame/reference/apis/jsr118/java/io/ DataOutputStream.html # writeUTF (java.lang.String) "يختلط =" نوفولو noreferrer "> DataOutputStream.writeUTF(String) ) لذلك قد لا يكون ما كنت تبحث عنه - ولكنه عمل في مختلف الهواتف / نماذج الخ

نصائح أخرى

ما الشخصي الذي تستخدمه؟ الملف الشخصى MID في JSR 118 يحدد InputStreamReader ( لا StringReader، ولكن هذا لن تساعدك على قراءة من InputStream على أي حال).

وتحرير: لعكس التغييرات على السؤال التالي:)

ويمكنك استخدام InputStreamReader.read (شار []، الباحث، الباحث)، وعندما كنت قد قرأت كل ما تريد، إنشاء سلسلة جديدة من مجموعة شار. إذا كنت ترغب في قراءة سطر في وقت واحد كما كنت من BufferedReader، تحتاج أساسا لتنفيذ وظائف BufferedReader نفسك (حفظ مخزن مؤقت "للقراءة ولكن لا يستهلك" حرف)، والحفاظ على القراءة حتى تصل فترة انقطاع الخط.

وحسنا ... وأنا أعلم أن هذا منذ وقت طويل.

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

وأنا لا أزال أتساءل لماذا J2ME لم تتضمن شيئا أساسيا مثل طريقة BufferedReader لمآخذ، انها ليست مثل الهواتف المحمولة فرياكين سوف تعطل معها ... ونعم، أنا لا أعطي الحمار فأر لو فرغت بلدي التطبيق 1MS أبطأ مما ينبغي.

و(أنا مجرد الذهاب لوضع رمز ذات الصلة، وأفترض أنك تعرف كيفية تشكيل الطبقات واستيراد المكتبات المطلوبة)

ServerSocketConnection listener
    = (ServerSocketConnection)Connector.open("socket://:1235");
System.out.println("Waiting for connection...");
StreamConnection server = listener.acceptAndOpen();
InputStream is = server.openInputStream();

//Now comes the fake BufferedReader equivalent part

int ch = 0;
StringBuffer sb = new StringBuffer();

while ((ch = is.read()) != -1){
    sb.append((char)ch);
    if(sb.charAt(sb.length()-1) == 13 ) {
       //Carriage return was received or ENTER was pressed
       break; //Exit loop and print input
    }
}

وكما ترون، فإن طريقة is.read() قفل استلام الخيط حتى مدخلات جديدة من المستخدم BYTE في وقت واحد. وهذا يعني إذا كنت تستخدم Telnet لاختبار، فإن كل ضغطة جعل أعاد حلقة مرة واحدة، وبالتالي، نحن ببساطة سلسلة شار التي كتبها شار في StringBuffer حتى يتم تلقي شار 13.

System.out.println(sb.toString());

وآمل أن يساعد هذا الأشخاص الذين يحاولون القيام الخادم مأخذ على J2ME. أنا وضعت بالفعل إصدار مؤشرات وظيفية بالكامل من هذا لبلاك، في حالة أي شخص يحتاج إليها.

هل تكون قادرة على توفير مثال على ذلك؟

ويمكنك استخدام InputStreamReader.read(char[], int, int) وعندما كنت قد قرأت كل ما تريد، إنشاء سلسلة جديدة من مجموعة شار. إذا كنت ترغب في قراءة سطر في وقت واحد كما كنت من BufferedReader، تحتاج أساسا لتنفيذ وظائف BufferedReader نفسك (حفظ مخزن مؤقت "للقراءة ولكن لا يستهلك" حرف)، والحفاظ على القراءة حتى تصل فترة انقطاع الخط.

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