Вопросы, использующие Base64 и удаленные запросы в удаленную базу данных ... (большое время ожидания с большими изображениями ???) - PullRequest
0 голосов
/ 31 января 2011

у меня есть образ 5Kb, когда я преобразую его в строку Base64 и загружаю в удаленную базу данных, удаленному запросу INSERT требуется всего несколько секунд

но .. у меня есть изображение размером 100 КБ, когда я преобразовываю его в строку Base64 и загружаю в свою удаленную базу данных, удаленному запросу INSERT требуется много секунд для выполнения

почему

это потому, что Base64 String требуется 100 КБ пространства, как некодированное изображение?

есть способ решить эти времена ожидания?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: я использую PHP + JSOn для подключения к удаленной базе данных mysql.

Одед предложил мне не использовать Base64 и использовать BLOB, а не LONGTEXT. Но .... ¿как использовать BLOB с JSON + PHP? я не знаю, как я знаю, JSON + PHP должен получать и отправлять строки, а BLOB не является строкой

спасибо

РЕДАКТИРОВАТЬ 2:

это код, в котором требуется время ожидания (оно ожидает в строке: while ((line = reader.readLine()) != null) {, ожидание reader.readLine())

этот код получает одного пользователя из удаленной базы данных, требуется много времени, чтобы показать пользователя в моем приложении

public Friend RetrieveOneUser(String email)
{

    Friend friend=null;

    String result = "";
    //the parameter data to send
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("email",email));

    //http post
    InputStream is=null;
    try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(this.BaseURL + this.GetOneUser_URL);
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
    }catch(Exception e){
            Log.e("log_tag", "Error in http connection "+e.toString());
    }
    //convert response to string
    try{

            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
            }
            is.close();

            result=sb.toString();
    }catch(Exception e){
            Log.e("log_tag", "Error converting result "+e.toString());
    }

    //parse json data
    try{
            JSONArray jArray = new JSONArray(result);


            for(int i=0;i<jArray.length();i++)
            {
                    JSONObject json_data = jArray.getJSONObject(i);
                    friend=new Friend(json_data.getString("email"),json_data.getString("password"), json_data.getString("fullName"), json_data.getString("mobilePhone"), json_data.getString("mobileOperatingSystem"),"",json_data.getString("photo"));
            }
    }
    catch(JSONException e){
            Log.e("log_tag", "Error parsing data "+e.toString());
    }

    return friend;
}

Ответы [ 2 ]

2 голосов
/ 31 января 2011

Почему бы не сохранить изображение непосредственно как BLOB ?

Все преобразования выполняются с задержками и дополнительным временем процессора.


Обновление:

Теперь, когда мы знаем , почему требуется base64 (поскольку JSON не может передавать двоичные данные), я исправляю свой ответ.

Вам нужно проверить почему это занимает много времени. Это передача по сети? Это база данных? Как только вы знаете ответ, мы можем начать искать решение.

1 голос
/ 31 января 2011

Base64 - 6-битная кодировка: для передачи 3 байтов изображения требуется 4 символа (4 байта).Таким образом, хранение 100 КБ образа в Base64 занимает 133 КБ.

Вы еще не сказали, какую базу данных используете, но не все базы данных работают хорошо, если вы храните более 8 КБ на строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...