Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > wvxvw

Диалог между wvxvw и Apikaster
Отображение с 1 по 3 из 3 публичных сообщений
  1. Apikaster
    24.08.2011 12:44
    Apikaster
    Спасибо огромное.
    Кажется заработало.
    Но кажется со сжатием в яве проблемы.
    Он не сжимает.
  2. Apikaster
    22.08.2011 15:28
    Apikaster
    а можно тут чуточку по подробнее?
    у меня есть код на яве.
    я использовал библиотеку blazeDS.
    я нашел этот код в гугле, и применил его.
    сжал в байтаррей.
    и закинул в localhost.
    вроде бы я все правильно сделал.
    но какие то глюки возникли.
    ошибки нету.
    но может байт аррей не правильно использую?!
    подскажите нубику.
    мне просто нужно сжать датасет в amf.


    package test.flex.amf.flex;

    import java.io.*;
    import java.math.BigDecimal;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.HashMap;
    import flex.messaging.io.SerializationContext;
    import flex.messaging.io.amf.Amf3Input;
    import flex.messaging.io.amf.Amf3Output;
    import javassist.bytecode.ByteArray;

    import javax.xml.parsers.DocumentBuilderFactory;
    import com.xcframework.tab.XTable;

    public class testAMF {
    public static void main(String[] args) {
    try {

    ArrayList al = new ArrayList();

    al.add("One");
    al.add("Two");
    al.add("Thre");
    al.add("Four");
    al.add("Five");
    al.add("Six");
    al.add("Onere");
    al.add("Twwero");
    al.add("Tsdfghre");
    al.add("Fosdfgur");
    al.add("Fsdfgive");
    al.add("Sisdfgx");

    HashMap hm = new HashMap();

    hm.put("field1", "value1");
    hm.put("field2", "value2");
    hm.put("field3", "value3");
    hm.put("field4", "value4");
    hm.put("field5", "value5");
    hm.put("field6", "value6");
    hm.put("field1", "value1");
    hm.put("field2", "value2");
    hm.put("field3", "value3");
    hm.put("field4", "value4");
    hm.put("field5", "value5");
    hm.put("field6", "value6");
    hm.put("field1", "value1");
    hm.put("field2", "value2");
    hm.put("field3", "value3");
    hm.put("field4", "value4");
    hm.put("field5", "value5");
    hm.put("field6", "value6");
    hm.put("field7", "value1");
    hm.put("field8", "value2");
    hm.put("field9", "value3");
    hm.put("field10", "value4");
    hm.put("field11", "value5");
    hm.put("field12", "value6");

    SerializationContext context = getSerializationContext();

    TestBean testBean = new TestBean();
    //testBean.setList(al);
    //testBean.setMap(hm);
    testBean.setString("test test test test test test");


    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    //ByteArray bout = new ByteArray();

    Amf3Output amf3Output = new Amf3Output(context);
    amf3Output.setOutputStream(bout);
    amf3Output.writeObject(testBean);
    File f = new File("f.txt");

    FileOutputStream to = new FileOutputStream(f);
    bout.writeTo(to);
    amf3Output.flush();
    amf3Output.close();

    System.out.println("testBean = " + testBean.toString().length());
    System.out.println("amf3Output = " + amf3Output.toString().length());

    System.out.println("string =" + testBean.getString());
    //System.out.println("list =" + testBean.getList());
    //System.out.println("map =" + testBean.getMap());

    //InputStream bIn = new ByteArrayInputStream(bout.toByteArray());
    File ff = new File("f.txt");
    FileInputStream i = new FileInputStream(ff);

    //ByteArrayInputStream bIn = new ByteArrayInputStream(bout.toByteArray());
    //ByteArrayInputStream bIn = new ByteArrayInputStream(i);

    Amf3Input amf3Input = new Amf3Input(context);

    //amf3Input.setInputStream(bIn);
    amf3Input.setInputStream(i);
    TestBean o = (TestBean) amf3Input.readObject();


    System.out.println("str eq = " + o.getString().equals(testBean.getString()));
    //System.out.println("list eq = " + o.getList().equals(testBean.getList()));
    //System.out.println("map eq = " + o.getMap().equals(testBean.getMap()));

    System.out.println("string =" + o.getString());
    //System.out.println("list =" + o.getList());
    //System.out.println("map =" + o.getMap());

    System.out.println("amf3Input = " + amf3Input.toString().length());

    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    public static SerializationContext getSerializationContext() {
    //Threadlocal SerializationContent
    SerializationContext serializationContext = SerializationContext.getSerializationContext();
    /*
    serializationContext.enableSmallMessages = true;
    serializationContext.instantiateTypes = true;
    //use _remoteClass field
    serializationContext.supportRemoteClass = true;
    //false Legacy Flex 1.5 behavior was to return a java.util.Collection for Array
    //ture New Flex 2+ behavior is to return Object[] for AS3 Array
    serializationContext.legacyCollection = false;
    serializationContext.legacyMap = false;
    //false Legacy flash.xml.XMLDocument Type
    //true New E4X XML Type
    serializationContext.legacyXMLDocument = false;
    //determines whether the constructed Document is name-space aware
    serializationContext.legacyXMLNamespaces = false;
    serializationContext.legacyThrowable = false;
    serializationContext.legacyBigNumbers = false;

    serializationContext.restoreReferences = false;
    serializationContext.logPropertyErrors = false;
    serializationContext.ignorePropertyErrors = true;
    */
    return serializationContext;

    /*
    97.
    serializationContext.enableSmallMessages = serialization.getPropertyAsBoolean(ENABLE_SMALL_MESSAGES, true);
    98.
    serializationContext.instantiateTypes = serialization.getPropertyAsBoolean(INSTANTIATE_TYPES, true);
    99.
    serializationContext.supportRemoteClass = serialization.getPropertyAsBoolean(SUPPORT_REMOTE_CLASS, false);
    100.
    serializationContext.legacyCollection = serialization.getPropertyAsBoolean(LEGACY_COLLECTION, false);
    101.
    serializationContext.legacyMap = serialization.getPropertyAsBoolean(LEGACY_MAP, false);
    102.
    serializationContext.legacyXMLDocument = serialization.getPropertyAsBoolean(LEGACY_XML, false);
    103.
    serializationContext.legacyXMLNamespaces = serialization.getPropertyAsBoolean(LEGACY_XML_NAMESPACES, false);
    104.
    serializationContext.legacyThrowable = serialization.getPropertyAsBoolean(LEGACY_THROWABLE, false);
    105.
    serializationContext.legacyBigNumbers = serialization.getPropertyAsBoolean(LEGACY_BIG_NUMBERS, false);
    106.
    boolean showStacktraces = serialization.getPropertyAsBoolean(SHOW_STACKTRACES, false);
    107.
    if (showStacktraces && Log.isWarn())
    108.
    log.warn("The " + SHOW_STACKTRACES + " configuration option is deprecated and non-functional. Please remove this from your configuration file.");
    109.
    serializationContext.restoreReferences = serialization.getPropertyAsBoolean(RESTORE_REFERENCES, false);
    110.
    serializationContext.logPropertyErrors = serialization.getPropertyAsBoolean(LOG_PROPERTY_ERRORS, false);
    111.
    serializationContext.ignorePropertyErrors = serialization.getPropertyAsBoolean(IGNORE_PROPERTY_ERRORS, true);
    112.
    */
    }
    }
  3. Apikaster
    19.08.2011 17:29
    Apikaster
    Ваш ответ на один из постов: RemoteObject - это какой-то пра-пра-правнук NetConnection. NetConnection, в свою очередь, это класс управляющий соединением использующим RTMP[подобные] протоколы. В том числе, этот класс умеет парсить AMF формат. Во Флексе его назвали так потому что, наверное, идея была в том, чтобы представлять объекты созданные серверной программой на клиенте, и один экземпляр RemoteObject представлял бы один экземпляр, например, Hash<String>. Естесственно, понимание того, что это крайне расточительно пришло позже И никто таким образом RO не использует. В более современном варианте, RemoteObject сделали базовым классов для автоматически сгенерированных `сервисов' (т.е. объектов ответсвенных за обновление данных во всяких флексовых компонентах) - можно попробовать это сделать даже через GUI - вытащить на сцену какой-нибудь DataGrid, выбрать из Data -> Connect куда-то там, насторить куда подключаться и вам сгенерят абсолютно отстойный, но рабочий код этого самого подключения + какие-то функции управления этим подключением.
    Кроме этого RemoteObject завязан на кучу разных вещей, вплоть до настроек компилятора. Например, -services настройка может задать глобально разные параметры, такие как алиасы для груп сервисов, куда нужно подключаться, формат каждого сервиса, класс, который нужно использовать для канала создаваемого для каждого сервиса и т.п. Все эти махинации, возможно, имели смысл, если смотреть на них в контексте BlazeDS (Adobe разрабатывают и предлагают купить серверную часть для работы с флексовыми приложениями). Вне этого контекста - как по мне, RemoteObject переполнен ненужными возможностями и очень сложен в использовании, гораздо проще и надежнее использовть NetConnection.

    А NetConnection парсит AMF форматы?
    Ну к примеру я напишу какой то датасет с метаданными и параметрами на Яве. И с помощью библиотеки BlazeDS скомпилю его в AMF формат и прикреплю его на какой то URL(к примеру http://localhost:8080/test/test). И при NetConnection он сможет понять что это AMF? По тому что я пробовал через HTTPService обратиться на этот адрес. Но HTTPServise не понял что это за формат.
    Заранее благодарен за помощь.

 


Часовой пояс GMT +4, время: 17:09.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.