Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > HTTPS, InputStream - не всё читает, почему?


Автор: prog2013 16.11.2013, 01:50
Здравствуйте! Помогите, не могу прочитать ответ от сервера полностью.
Использую Get-запрос к веб-серверу по https.
Когда даных мало, всё читается за один раз, а когда их больше 4000 байт, то читается только одна порция.

Использую j2me SDK 3.3 из среды нетбинс в.7. В проге использую стандартное:
Код

InputStream ins;
int len= ins.available();
while (p>0) { p=read(bData, offs, len); ....}


При отладкке заметил. У InputStream есть константа SKIP_BLOCK_SIZE= 4096. Похоже как-то с этим связано, т.к. len= 3759 байт и дальше текст теряется из-за того,  что следующая попытка выполнить  
len= ins.available(); даёт  len = 0.

Писать свой SKIP_BLOCK_SIZE= 8 тыщ. или больше как-то не красиво, а это возвращаются запросы к БД. Как думаете, в чём м.б. дело? Ведь во всех примерах  именно так и пишут, да и в форумах те же примеры гуляют.

Автор: prog2013 16.11.2013, 14:44
В общем сделал пока цикл в цикле. 
Впечателние такое, что  ins.available() нужно "подтолкнуть", чтобы оно прочло следущую порцию.

Код

InputStream ins;
...
while( ins.available() >0) {
     while ( (i= read(bB)) != -1) { 
      //здесь собираем i --> Vector
      ....}
}
//  а здесь Vector --> String  в зависимости от кодировки


А когда будет давать 0 байт при наличии данных, тогда сначала попробую "подтолкнуть" буфер чтением  одного байта =read(); либо сразу поставлю =read(); в первый цикл.

Автор: qpimap 6.5.2015, 18:41
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
public class Lab_1 {
public static void main(String[]args) {
FileReader myFile=null;
BufferedReader buff=null;
String line=new String();
 try{
myFile=new FileReader("d:\\a.txt");
buff=new BufferedReader(myFile);
 while(true) {
line=buff.readLine();
if(line==null) break;
System.out.println(line);
char[]m=line.toCharArray();
System.out.println(m[0]);
}
} catch(IOException e) {
e.printStackTrace();
}finally{
  try{
buff.close();
myFile.close();
}catch(IOException e1){
e1.printStackTrace();
}
}
}
}
====================================
вставляешь в файл .txt данные . И на выходе после компиляции получаешь .class 
с массивом который и будешь использовать в своей MIDlet программе как файл с данными ...
очень полезный скрипт при составлении русификаторов или других баз данных в J2ME ...
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)