Перевод названия квестов... - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 24.01.2010, 00:37   #1
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) Перевод названия квестов...

Вот люди... столкнулся с такой проблемой.... вообщем когда взялся за перевод квестов столкнулся с проблемой русского названия квестов...
1) я точно не знаю где изменять его но как я понял тут (красным)
[SPOILER]# Made by Mr. Have fun! Version 0.2
import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest

qn = "1_LettersOfLove1"

#NPCs
DARIN = 30048
ROXXY = 30006
BAULRO = 30033

#ITEMS
DARINGS_LETTER = 687
RAPUNZELS_KERCHIEF = 688
DARINGS_RECEIPT = 1079
BAULS_POTION = 1080

#REWARD
NECKLACE = 906

class Quest (JQuest) :

def __init__(self,id,name,descr):
JQuest.__init__(self,id,name,descr)
self.questItemIds = [DARINGS_LETTER, RAPUNZELS_KERCHIEF, DARINGS_RECEIPT, BAULS_POTION]

def onAdvEvent (self,event,npc, player) :
htmltext = event
st = player.getQuestState(qn)
if not st : return
if event == "30048-06.htm" :
st.set("cond","1")
st.setState(State.STARTED)
st.playSound("ItemSound.quest_accept")
if st.getQuestItemsCount(DARINGS_LETTER) == 0 :
st.giveItems(DARINGS_LETTER,1)
return htmltext

def onTalk (self,npc,player):
st = player.getQuestState(qn)
htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
if not st: return htmltext

npcId = npc.getNpcId()
id = st.getState()

cond = st.getInt("cond")
ItemsCount_DL = st.getQuestItemsCount(DARINGS_LETTER)
ItemsCount_RK = st.getQuestItemsCount(RAPUNZELS_KERCHIEF)
ItemsCount_DR = st.getQuestItemsCount(DARINGS_RECEIPT)
ItemsCount_BP = st.getQuestItemsCount(BAULS_POTION)
if id == State.COMPLETED :
htmltext = "<html><body>This quest has already been completed.</body></html>"
elif npcId == DARIN and id == State.CREATED:
if player.getLevel() >= 2 :
if cond < 15 :
htmltext = "30048-02.htm"
else:
htmltext = "30048-01.htm"
st.exitQuest(1)
else:
htmltext = "<html><body>Quest for characters level 2 and above.</body></html>"
st.exitQuest(1)
elif id == State.STARTED :
if npcId == ROXXY and cond:
if ItemsCount_RK == 0 and ItemsCount_DL :
htmltext = "30006-01.htm"
st.takeItems(DARINGS_LETTER,-1)
st.giveItems(RAPUNZELS_KERCHIEF,1)
st.set("cond","2")
st.playSound("ItemSound.quest_middle")
elif ItemsCount_BP or ItemsCount_DR :
htmltext = "30006-03.htm"
elif ItemsCount_RK :
htmltext = "30006-02.htm"
elif npcId == DARIN and cond and ItemsCount_RK > 0:
htmltext = "30048-08.htm"
st.takeItems(RAPUNZELS_KERCHIEF,-1)
st.giveItems(DARINGS_RECEIPT,1)
st.set("cond","3")
st.playSound("ItemSound.quest_middle")
elif npcId == BAULRO and cond:
if ItemsCount_DR > 0 :
htmltext = "30033-01.htm"
st.takeItems(DARINGS_RECEIPT,-1)
st.giveItems(BAULS_POTION,1)
st.set("cond","4")
st.playSound("ItemSound.quest_middle")
elif ItemsCount_BP > 0 :
htmltext = "30033-02.htm"
elif npcId == DARIN and cond and ItemsCount_RK == 0:
if ItemsCount_DR > 0 :
htmltext = "30048-09.htm"
elif ItemsCount_BP > 0 :
htmltext = "30048-10.htm"
st.takeItems(BAULS_POTION,-1)
st.giveItems(57,2466)
st.giveItems(NECKLACE,1)
st.addExpAndSp(5672,446)
st.unset("cond")
st.exitQuest(False)
st.playSound("ItemSound.quest_finish")
else:
htmltext = "30048-07.htm"
return htmltext

QUEST = Quest(1,qn,"Letters Of Love1")

QUEST.addStartNpc(DARIN)

QUEST.addTalkId(DARIN)
QUEST.addTalkId(ROXXY)
QUEST.addTalkId(BAULRO) [/SPOILER]

если тут, то как его изменить если кирилицу сервер не читает...


а если же в другом месте, то где?
krisadr вне форума Ответить с цитированием
Непрочитано 24.01.2010, 00:51   #2
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Перевод названия квестов...

Куда-то вы не туда полезли... questname-e.dat

Цитата:
#tag quest_id quest_prog main_name prog_name
1 1 1 Любовное послание Доставка послания
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 24.01.2010, 12:45   #3
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) Re: Перевод названия квестов...

да неее Вы не поняли.... папка то у меня пропатченая от самого Рус оффа--- значит со стороны клиента все на русском...
Но при диологе с нпс после нажатие ссылки Quest выскакивает (на английсков языке) ссылки на выбор квестов (если их больше 1)!!! вот пример...



Добавлено через 3 часа 27 минут
Цитата:
Сообщение от PROGRAMMATOR Посмотреть сообщение
Куда-то вы не туда полезли... questname-e.dat
Хмм.. ну такс... есть идеи?:??

Добавлено через 3 часа 54 минуты
походу я все правельно делал, но увы в скрипте кирилицы быть не может... тогжа вопрос .... может быть вместо
t.set("cond","4")
st.playSound("ItemSound.quest_middle")
elif ItemsCount_BP > 0 :
htmltext = "30033-02.htm"
elif npcId == DARIN and cond and ItemsCount_RK == 0:
if ItemsCount_DR > 0 :
htmltext = "30048-09.htm"
elif ItemsCount_BP > 0 :
htmltext = "30048-10.htm"
st.takeItems(BAULS_POTION,-1)
st.giveItems(57,2466)
st.giveItems(NECKLACE,1)
st.addExpAndSp(5672,446)
st.unset("cond")
st.exitQuest(False)
st.playSound("ItemSound.quest_finish")
else:
htmltext = "30048-07.htm"
return htmltext

QUEST = Quest(1,qn,"Letters Of Love1")

QUEST.addStartNpc(DARIN)

QUEST.addTalkId(DARIN)
QUEST.addTalkId(ROXXY)
QUEST.addTalkId(BAULRO)

сделать как нить типо так

QUEST = Quest(1,qn,"htmltext = "32173-11111.htm"")

32173-11111.htm в этом файлике будит название квеста...

Добавлено через 3 часа 59 минут
или нада каким то образом в сервер впихнуть поддержку кирилицы.... вообщем кто поможет скажу Огромное СПАСИБО!

Добавлено через 5 часов 20 минут
походу ниукого идей нет(

Последний раз редактировалось krisadr; 24.01.2010 в 18:05. Причина: Добавлено сообщение
krisadr вне форума Ответить с цитированием
Непрочитано 25.01.2010, 15:37   #4
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) Re: Перевод названия квестов...

ененененен народ UP темке!!!
krisadr вне форума Ответить с цитированием
Непрочитано 25.01.2010, 16:57   #5
Аватар для _NEO_PK
Пользователь

По умолчанию Re: Перевод названия квестов...

Переводится это не тут, переводится это в html файлах, __init__.py вообще трогать в данном случае не надо.
__________________

Получил шару - нажми СПАСИБО
А ищо я прашу банеть мобаф, ато они тоже убивают и я становлюсь расстроенным.
И исчо зобаньти Онтароса а то он не убеваеццо.
----------
Я настолько суров, что убегая от врагов использую не bsoe, а /unstuck.
_NEO_PK вне форума Отправить сообщение для _NEO_PK с помощью ICQ Ответить с цитированием
Непрочитано 25.01.2010, 17:57   #6
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) Re: Перевод названия квестов...

парень, ты не прав ... изменив ту красную строчку (в самом низу) я проверял и само название менялось! а вот когда писал сусское название то в игре одни иероглифы и вопросы... (это если даже в ютф 8)

Добавлено через 1 час 54 минуты
ОМГ... что никто не знает как это перевести?

[SPOILER]
PHP код:
/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.l2j;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import net.sf.l2j.gameserver.util.StringUtil;

/**
 * Encodes and decodes to and from Base64 notation.
 * 
 * The source is based on the work of Robert Harder
 * 
 * <p>
 * I am placing this code in the Public Domain. Do with it as you will. This
 * software comes with no guarantees or warranties but with plenty of
 * well-wishing instead! Please visit <a
 * href="http://iharder.net/xmlizable">http://iharder.net/base64</a>
 * periodically to check for updates or to contribute improvements.
 * </p>
 * 
 * @author Robert Harder
 * @author rob@iharder.net
 * @version 2.0
 */
public class Base64
{
    
    
/*  P U B L I C F I E L D S */

    /** No options specified. Value is zero. */
    
public final static int NO_OPTIONS 0;
    
    
/** Specify encoding. */
    
public final static int ENCODE 1;
    
    
/** Specify decoding. */
    
public final static int DECODE 0;
    
    
/** Specify that data should be gzip-compressed. */
    
public final static int GZIP 2;
    
    
/** Don't break lines when encoding (violates strict Base64 specification) */
    
public final static int DONT_BREAK_LINES 8;
    
    
/*  P R I V A T E F I E L D S */

    /** Maximum line length (76) of Base64 output. */
    
private final static int MAX_LINE_LENGTH 76;
    
    
/** The equals sign (=) as a byte. */
    
private final static byte EQUALS_SIGN = (byte'=';
    
    
/** The new line character (\n) as a byte. */
    
private final static byte NEW_LINE = (byte'\n';
    
    
/** Preferred encoding. */
    
private final static String PREFERRED_ENCODING "UTF-8";
    
    
/** The 64 valid Base64 values. */
    
private final static byte[] ALPHABET;
    private final static 
byte[] _NATIVE_ALPHABET /* May be something funny like EBCDIC */
    
{ (byte'A', (byte'B', (byte'C', (byte'D', (byte'E', (byte'F', (byte'G',
            (
byte'H', (byte'I', (byte'J', (byte'K', (byte'L', (byte'M', (byte'N',
            (
byte'O', (byte'P', (byte'Q', (byte'R', (byte'S', (byte'T', (byte'U',
            (
byte'V', (byte'W', (byte'X', (byte'Y', (byte'Z', (byte'a', (byte'b',
            (
byte'c', (byte'd', (byte'e', (byte'f', (byte'g', (byte'h', (byte'i',
            (
byte'j', (byte'k', (byte'l', (byte'm', (byte'n', (byte'o', (byte'p',
            (
byte'q', (byte'r', (byte's', (byte't', (byte'u', (byte'v', (byte'w',
            (
byte'x', (byte'y', (byte'z', (byte'0', (byte'1', (byte'2', (byte'3',
            (
byte'4', (byte'5', (byte'6', (byte'7', (byte'8', (byte'9', (byte'+',
            (
byte'/' };
    
    public static 
void main(String[] argsthrows IOException
    
{
        
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        
System.out.print("Enter String to encode: ");
        
System.out.println(Base64.encodeBytes(bf.readLine().getBytes()));
    }
    
    
/** Determine which ALPHABET to use. */
    
static
    {
        
byte[] __bytes;
        try
        {
            
__bytes "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".getBytes(PREFERRED_ENCODING);
        } 
// end try
        
catch (java.io.UnsupportedEncodingException use)
        {
            
__bytes _NATIVE_ALPHABET// Fall back to native encoding
        
// end catch
        
ALPHABET __bytes;
    } 
// end static
    
    /**
     * Translates a Base64 value to either its 6-bit reconstruction value or a
     * negative number indicating some other meaning.
     **/
    
final static byte[] DECODABET = { -9, -9, -9, -9, -9, -9, -9, -9, -9// Decimal 0 - 8
            
-5, -5// Whitespace: Tab and Linefeed
            
-9, -9// Decimal 11 - 12
            
-5// Whitespace: Carriage Return
            
-9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9// Decimal 14 - 26
            
-9, -9, -9, -9, -9// Decimal 27 - 31
            
-5// Whitespace: Space
            
-9, -9, -9, -9, -9, -9, -9, -9, -9, -9// Decimal 33 - 42
            
62// Plus sign at decimal 43
            
-9, -9, -9// Decimal 44 - 46
            
63// Slash at decimal 47
            
52535455565758596061// Numbers zero through nine
            
-9, -9, -9// Decimal 58 - 60
            
-1// Equals sign at decimal 61
            
-9, -9, -9// Decimal 62 - 64
            
012345678910111213// Letters 'A' through 'N'
            
141516171819202122232425// Letters 'O' through 'Z'
            
-9, -9, -9, -9, -9, -9// Decimal 91 - 96
            
26272829303132333435363738// Letters 'a' through 'm'
            
39404142434445464748495051// Letters 'n' through 'z'
            
-9, -9, -9, -// Decimal 123 - 126
    /*
     * ,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 127 - 139
     * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 140 - 152
     * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 153 - 165
     * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 166 - 178
     * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 179 - 191
     * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 192 - 204
     * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 205 - 217
     * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 218 - 230
     * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9, // Decimal 231 - 243
     * -9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9 // Decimal 244 - 255
     */
    
};
    
    
// private final static byte BAD_ENCODING = -9; // Indicates error in encoding
    
private final static byte WHITE_SPACE_ENC = -5// Indicates white space in encoding
    
private final static byte EQUALS_SIGN_ENC = -1// Indicates equals sign in encoding
    
    /** Defeats instantiation. */
    
private Base64()
    {
    }
    
    
/*  E N C O D I N G M E T H O D S */

    // /**
    // * Encodes the first three bytes of array <var>threeBytes</var>
    // * and returns a four-byte array in Base64 notation.
    // *
    // * @param threeBytes the array to convert
    // * @return four byte array in Base64 notation.
    // * @since 1.3
    // */
    // private static byte[] encode3to4( byte[] threeBytes )
    // {
    // return encode3to4( threeBytes, 3 );
    // } // end encodeToBytes
    // /**
    // * Encodes up to the first three bytes of array <var>threeBytes</var>
    // * and returns a four-byte array in Base64 notation.
    // * The actual number of significant bytes in your array is
    // * given by <var>numSigBytes</var>.
    // * The array <var>threeBytes</var> needs only be as big as
    // * <var>numSigBytes</var>.
    // *
    // * @param threeBytes the array to convert
    // * @param numSigBytes the number of significant bytes in your array
    // * @return four byte array in Base64 notation.
    // * @since 1.3
    // */
    // private static byte[] encode3to4( byte[] threeBytes, int numSigBytes )
    // {
    // byte[] dest = new byte[4];
    // encode3to4( threeBytes, 0, numSigBytes, dest, 0 );
    // return dest;
    // }
    /**
     * Encodes up to the first three bytes of array <var>threeBytes</var> and
     * returns a four-byte array in Base64 notation. The actual number of
     * significant bytes in your array is given by <var>numSigBytes</var>. The
     * array <var>threeBytes</var> needs only be as big as
     * <var>numSigBytes</var>. Code can reuse a byte array by passing a
     * four-byte array as <var>b4</var>.
     * 
     * @param b4
     *            A reusable byte array to reduce array instantiation
     * @param threeBytes
     *            the array to convert
     * @param numSigBytes
     *            the number of significant bytes in your array
     * @return four byte array in Base64 notation.
     * @since 1.5.1
     */
    
static byte[] encode3to4(byte[] b4byte[] threeBytesint numSigBytes)
    {
        
encode3to4(threeBytes0numSigBytesb40);
        return 
b4;
    } 
// end encode3to4
    
    /**
     * Encodes up to three bytes of the array <var>source</var> and writes the
     * resulting four Base64 bytes to <var>destination</var>. The source and
     * destination arrays can be manipulated anywhere along their length by
     * specifying <var>srcOffset</var> and <var>destOffset</var>. This method
     * does not check to make sure your arrays are large enough to accomodate
     * <var>srcOffset</var> + 3 for the <var>source</var> array or
     * <var>destOffset</var> + 4 for the <var>destination</var> array. The
     * actual number of significant bytes in your array is given by
     * <var>numSigBytes</var>.
     * 
     * @param source
     *            the array to convert
     * @param srcOffset
     *            the index where conversion begins
     * @param numSigBytes
     *            the number of significant bytes in your array
     * @param destination
     *            the array to hold the conversion
     * @param destOffset
     *            the index where output will be put
     * @return the <var>destination</var> array
     * @since 1.3
     */
    
static byte[] encode3to4(byte[] sourceint srcOffsetint numSigBytesbyte[] destination,
            
int destOffset)
    {
        
// 1 2 3
        // 01234567890123456789012345678901 Bit position
        // --------000000001111111122222222 Array position from threeBytes
        // --------| || || || | Six bit groups to index ALPHABET
        // >>18 >>12 >> 6 >> 0 Right shift necessary
        // 0x3f 0x3f 0x3f Additional AND
        
        // Create buffer with zero-padding if there are only one or two
        // significant bytes passed in the array.
        // We have to shift left 24 in order to flush out the 1's that appear
        // when Java treats a value as negative that is cast from a byte to an
        // int.
        
int inBuff = (numSigBytes ? ((source[srcOffset] << 24) >>> 8) : 0)
                | (
numSigBytes ? ((source[srcOffset 1] << 24) >>> 16) : 0)
                | (
numSigBytes ? ((source[srcOffset 2] << 24) >>> 24) : 0);
        
        switch (
numSigBytes)
        {
            case 
3:
                
destination[destOffset] = ALPHABET[(inBuff >>> 18)];
                
destination[destOffset 1] = ALPHABET[(inBuff >>> 12) & 0x3f];
                
destination[destOffset 2] = ALPHABET[(inBuff >>> 6) & 0x3f];
                
destination[destOffset 3] = ALPHABET[(inBuff) & 0x3f];
                return 
destination;
                
            case 
2:
                
destination[destOffset] = ALPHABET[(inBuff >>> 18)];
                
destination[destOffset 1] = ALPHABET[(inBuff >>> 12) & 0x3f];
                
destination[destOffset 2] = ALPHABET[(inBuff >>> 6) & 0x3f];
                
destination[destOffset 3] = EQUALS_SIGN;
                return 
destination;
                
            case 
1:
                
destination[destOffset] = ALPHABET[(inBuff >>> 18)];
                
destination[destOffset 1] = ALPHABET[(inBuff >>> 12) & 0x3f];
                
destination[destOffset 2] = EQUALS_SIGN;
                
destination[destOffset 3] = EQUALS_SIGN;
                return 
destination;
                
            default:
                return 
destination;
        } 
// end switch
    
// end encode3to4
    
    /**
     * Serializes an object and returns the Base64-encoded version of that
     * serialized object. If the object cannot be serialized or there is another
     * error, the method will return <tt>null</tt>. The object is not
     * GZip-compressed before being encoded.
     * 
     * @param serializableObject
     *            The object to encode
     * @return The Base64-encoded object
     * @since 1.4
     */
    
public static String encodeObject(java.io.Serializable serializableObject)
    {
        return 
encodeObject(serializableObjectNO_OPTIONS);
    } 
// end encodeObject
    
    /**
     * Serializes an object and returns the Base64-encoded version of that
     * serialized object. If the object cannot be serialized or there is another
     * error, the method will return <tt>null</tt>.
     * <p>
     * Valid options:
     * 
     * <pre>
     *   GZIP: gzip-compresses object before encoding it.
     *   DONT_BREAK_LINES: don't break lines at 76 characters
     *     &lt;i&gt;Note: Technically, this makes your encoding non-compliant.&lt;/i&gt;
     * </pre>
     * <p>
     * Example: <code>encodeObject( myObj, Base64.GZIP )</code> or
     * <p>
     * Example:
     * <code>encodeObject( myObj, Base64.GZIP | Base64.DONT_BREAK_LINES )</code>
     * 
     * @param serializableObject
     *            The object to encode
     * @options Specified options
     * @return The Base64-encoded object
     * @see Base64#GZIP
     * @see Base64#DONT_BREAK_LINES
     * @since 2.0
     */
    
public static String encodeObject(java.io.Serializable serializableObjectint options)
    {
        
// Streams
        
java.io.ByteArrayOutputStream baos null;
        
java.io.OutputStream b64os null;
        
java.io.ObjectOutputStream oos null;
        
java.util.zip.GZIPOutputStream gzos null;
        
        
// Isolate options
        
int gzip = (options GZIP);
        
int dontBreakLines = (options DONT_BREAK_LINES);
        
        try
        {
            
// ObjectOutputStream -> (GZIP) -> Base64 -> ByteArrayOutputStream
            
baos = new java.io.ByteArrayOutputStream();
            
b64os = new Base64.OutputStream(baosENCODE dontBreakLines);
            
            
// GZip?
            
if (gzip == GZIP)
            {
                
gzos = new java.util.zip.GZIPOutputStream(b64os);
                
oos = new java.io.ObjectOutputStream(gzos);
            } 
// end if: gzip
            
else
                
oos = new java.io.ObjectOutputStream(b64os);
            
            
oos.writeObject(serializableObject);
        } 
// end try
        
catch (java.io.IOException e)
        {
            
e.printStackTrace();
            return 
null;
        } 
// end catch
        
finally
        
{
            try
            {
                
oos.close();
            }
            catch (
Exception e)
            {
            }
            try
            {
                
gzos.close();
            }
            catch (
Exception e)
            {
            }
            try
            {
                
b64os.close();
            }
            catch (
Exception e)
            {
            }
            try
            {
                
baos.close();
            }
            catch (
Exception e)
            {
            }
        } 
// end finally
        
        // Return value according to relevant encoding.
        
try
        {
            return new 
String(baos.toByteArray(), PREFERRED_ENCODING);
        } 
// end try
        
catch (java.io.UnsupportedEncodingException uue)
        {
            return new 
String(baos.toByteArray());
        } 
// end catch
        
    
// end encode
    
    /**
     * Encodes a byte array into Base64 notation. Does not GZip-compress data.
     * 
     * @param source
     *            The data to convert
     * @since 1.4
     */
    
public static String encodeBytes(byte[] source)
    {
        return 
encodeBytes(source0source.lengthNO_OPTIONS);
    } 
// end encodeBytes
    
    /**
     * Encodes a byte array into Base64 notation.
     * <p>
     * Valid options:
     * 
     * <pre>
     *   GZIP: gzip-compresses object before encoding it.
     *   DONT_BREAK_LINES: don't break lines at 76 characters
     *     &lt;i&gt;Note: Technically, this makes your encoding non-compliant.&lt;/i&gt;
     * </pre>
     * <p>
     * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
     * <p>
     * Example:
     * <code>encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES )</code>
     * 
     * 
     * @param source
     *            The data to convert
     * @param options
     *            Specified options
     * @see Base64#GZIP
     * @see Base64#DONT_BREAK_LINES
     * @since 2.0
     */
    
public static String encodeBytes(byte[] sourceint options)
    {
        return 
encodeBytes(source0source.lengthoptions);
    } 
// end encodeBytes
    
    /**
     * Encodes a byte array into Base64 notation. Does not GZip-compress data.
     * 
     * @param source
     *            The data to convert
     * @param off
     *            Offset in array where conversion should begin
     * @param len
     *            Length of data to convert
     * @since 1.4
     */
    
public static String encodeBytes(byte[] sourceint offint len)
    {
        return 
encodeBytes(sourceofflenNO_OPTIONS);
    } 
// end encodeBytes
    
    /**
     * Encodes a byte array into Base64 notation.
     * <p>
     * Valid options:
     * 
     * <pre>
     *   GZIP: gzip-compresses object before encoding it.
     *   DONT_BREAK_LINES: don't break lines at 76 characters
     *     &lt;i&gt;Note: Technically, this makes your encoding non-compliant.&lt;/i&gt;
     * </pre>
     * <p>
     * Example: <code>encodeBytes( myData, Base64.GZIP )</code> or
     * <p>
     * Example:
     * <code>encodeBytes( myData, Base64.GZIP | Base64.DONT_BREAK_LINES )</code>
     * 
     * 
     * @param source
     *            The data to convert
     * @param off
     *            Offset in array where conversion should begin
     * @param len
     *            Length of data to convert
     * @param breakLines
     *            Break lines at 80 characters or less.
     * @param options
     *            Specified options
     * @see Base64#GZIP
     * @see Base64#DONT_BREAK_LINES
     * @since 2.0
     */
    
public static String encodeBytes(byte[] sourceint offint lenint options)
    {
        
// Isolate options
        
int dontBreakLines = (options DONT_BREAK_LINES);
        
int gzip = (options GZIP);
        
        
// Compress?
        
if (gzip == GZIP)
        {
            
java.io.ByteArrayOutputStream baos null;
            
java.util.zip.GZIPOutputStream gzos null;
            
Base64.OutputStream b64os null;
            
            try
            {
                
// GZip -> Base64 -> ByteArray
                
baos = new java.io.ByteArrayOutputStream();
                
b64os = new Base64.OutputStream(baosENCODE dontBreakLines);
                
gzos = new java.util.zip.GZIPOutputStream(b64os);
                
                
gzos.write(sourceofflen);
                
gzos.close();
            } 
// end try
            
catch (java.io.IOException e)
            {
                
e.printStackTrace();
                return 
null;
            } 
// end catch
            
finally
            
{
                try
                {
                    
gzos.close();
                }
                catch (
Exception e)
                {
                }
                try
                {
                    
b64os.close();
                }
                catch (
Exception e)
                {
                }
                try
                {
                    
baos.close();
                }
                catch (
Exception e)
                {
                }
            } 
// end finally
            
            // Return value according to relevant encoding.
            
try
            {
                return new 
String(baos.toByteArray(), PREFERRED_ENCODING);
            } 
// end try
            
catch (java.io.UnsupportedEncodingException uue)
            {
                return new 
String(baos.toByteArray());
            } 
// end catch
        
// end if: compress
        
        // Convert option to boolean in way that code likes it.
        
boolean breakLines dontBreakLines == 0;
        
        
int len43 len 3;
        
byte[] outBuff = new byte[(len43// Main 4:3
                
+ ((len 3) > 0// Account for padding
                
+ (breakLines ? (len43 MAX_LINE_LENGTH) : 0)]; // New lines
        
int d 0;
        
int e 0;
        
int len2 len 2;
        
int lineLength 0;
        for (; 
len2+= 3+= 4)
        {
            
encode3to4(sourceoff3outBuffe);
            
            
lineLength += 4;
            if (
breakLines && lineLength == MAX_LINE_LENGTH)
            {
                
outBuff[4] = NEW_LINE;
                
e++;
                
lineLength 0;
            } 
// end if: end of line
        
// en dfor: each piece of array
        
        
if (len)
        {
            
encode3to4(sourceofflen doutBuffe);
            
+= 4;
        } 
// end if: some padding needed
        
        // Return value according to relevant encoding.
        
try
        {
            return new 
String(outBuff0ePREFERRED_ENCODING);
        } 
// end try
        
catch (java.io.UnsupportedEncodingException uue)
        {
            return new 
String(outBuff0e);
        } 
// end catch
        // end else: don't compress
        
    
// end encodeBytes
    
    /*  D E C O D I N G M E T H O D S */

    // /**
    // * Decodes the first four bytes of array <var>fourBytes</var>
    // * and returns an array up to three bytes long with the
    // * decoded values.
    // *
    // * @param fourBytes the array with Base64 content
    // * @return array with decoded values
    // * @since 1.3
    // */
    // private static byte[] decode4to3( byte[] fourBytes )
    // {
    // byte[] outBuff1 = new byte[3];
    // int count = decode4to3( fourBytes, 0, outBuff1, 0 );
    // byte[] outBuff2 = new byte[ count ];
    //
    // for( int i = 0; i < count; i++ )
    // outBuff2[i] = outBuff1[i];
    //
    // return outBuff2;
    // }
    /**
     * Decodes four bytes from array <var>source</var> and writes the resulting
     * bytes (up to three of them) to <var>destination</var>. The source and
     * destination arrays can be manipulated anywhere along their length by
     * specifying <var>srcOffset</var> and <var>destOffset</var>. This method
     * does not check to make sure your arrays are large enough to accomodate
     * <var>srcOffset</var> + 4 for the <var>source</var> array or
     * <var>destOffset</var> + 3 for the <var>destination</var> array. This
     * method returns the actual number of bytes that were converted from the
     * Base64 encoding.
     * 
     * 
     * @param source
     *            the array to convert
     * @param srcOffset
     *            the index where conversion begins
     * @param destination
     *            the array to hold the conversion
     * @param destOffset
     *            the index where output will be put
     * @return the number of decoded bytes converted
     * @since 1.3
     */
    
static int decode4to3(byte[] sourceint srcOffsetbyte[] destinationint destOffset)
    {
        
// Example: Dk==
        
if (source[srcOffset 2] == EQUALS_SIGN)
        {
            
// Two ways to do the same thing. Don't know which way I like best.
            // int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6
            // )
            // | ( ( DECODABET[ source[ srcOffset + 1] ] << 24 ) >>> 12 );
            
int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18)
                    | ((
DECODABET[source[srcOffset 1]] & 0xFF) << 12);
            
            
destination[destOffset] = (byte) (outBuff >>> 16);
            return 
1;
        }
        
        
// Example: DkL=
        
else if (source[srcOffset 3] == EQUALS_SIGN)
        {
            
// Two ways to do the same thing. Don't know which way I like best.
            // int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 ) >>> 6
            // )
            // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
            // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 );
            
int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18)
                    | ((
DECODABET[source[srcOffset 1]] & 0xFF) << 12)
                    | ((
DECODABET[source[srcOffset 2]] & 0xFF) << 6);
            
            
destination[destOffset] = (byte) (outBuff >>> 16);
            
destination[destOffset 1] = (byte) (outBuff >>> 8);
            return 
2;
        }
        
        
// Example: DkLE
        
else
        {
            try
            {
                
// Two ways to do the same thing. Don't know which way I like
                // best.
                // int outBuff = ( ( DECODABET[ source[ srcOffset ] ] << 24 )
                // >>> 6 )
                // | ( ( DECODABET[ source[ srcOffset + 1 ] ] << 24 ) >>> 12 )
                // | ( ( DECODABET[ source[ srcOffset + 2 ] ] << 24 ) >>> 18 )
                // | ( ( DECODABET[ source[ srcOffset + 3 ] ] << 24 ) >>> 24 );
                
int outBuff = ((DECODABET[source[srcOffset]] & 0xFF) << 18)
                        | ((
DECODABET[source[srcOffset 1]] & 0xFF) << 12)
                        | ((
DECODABET[source[srcOffset 2]] & 0xFF) << 6)
                        | ((
DECODABET[source[srcOffset 3]] & 0xFF));
                
                
destination[destOffset] = (byte) (outBuff >> 16);
                
destination[destOffset 1] = (byte) (outBuff >> 8);
                
destination[destOffset 2] = (byte) (outBuff);
                
                return 
3;
            }
            catch (
Exception e)
            {
                
System.out.println(StringUtil.concat(String.valueOf(source[srcOffset]), ": "String.valueOf(DECODABET[source[srcOffset]])));
                
System.out.println(StringUtil.concat(String.valueOf(source[srcOffset 1]), ": "String.valueOf(DECODABET[source[srcOffset 1]])));
                
System.out.println(StringUtil.concat(String.valueOf(source[srcOffset 2]), ": "String.valueOf(DECODABET[source[srcOffset 2]])));
                
System.out.println(StringUtil.concat(String.valueOf(source[srcOffset 3]), ": "String.valueOf(DECODABET[source[srcOffset 3]])));
                return -
1;
            } 
// end catch
        
}
    } 
// end decodeToBytes
    
    /**
     * Very low-level access to decoding ASCII characters in the form of a byte
     * array. Does not support automatically gunzipping or any other "fancy"
     * features.
     * 
     * @param source
     *            The Base64 encoded data
     * @param off
     *            The offset of where to begin decoding
     * @param len
     *            The length of characters to decode
     * @return decoded data
     * @since 1.3
     */
    
public static byte[] decode(byte[] sourceint offint len)
    {
        
int len34 len 4;
        
byte[] outBuff = new byte[len34]; // Upper limit on size of output
        
int outBuffPosn 0;
        
        
byte[] b4 = new byte[4];
        
int b4Posn 0;
        
int i 0;
        
byte sbiCrop 0;
        
byte sbiDecode 0;
        for (
offoff leni++)
        {
            
sbiCrop = (byte) (source[i] & 0x7f); // Only the low seven bits
            
sbiDecode DECODABET[sbiCrop];
            
            if (
sbiDecode >= WHITE_SPACE_ENC// White space, Equals sign or
                                              // better
            
{
                if (
sbiDecode >= EQUALS_SIGN_ENC)
                {
                    
b4[b4Posn++] = sbiCrop;
                    if (
b4Posn 3)
                    {
                        
outBuffPosn += decode4to3(b40outBuffoutBuffPosn);
                        
b4Posn 0;
                        
                        
// If that was the equals sign, break out of 'for' loop
                        
if (sbiCrop == EQUALS_SIGN)
                            break;
                    } 
// end if: quartet built
                    
                
// end if: equals sign or better
                
            
// end if: white space, equals sign or better
            
else
            {
                
System.err.println(StringUtil.concat("Bad Base64 input character at "String.valueOf(i), ": "String.valueOf(source[i]), "(decimal)"));
                return 
null;
            } 
// end else:
        
// each input character
        
        
byte[] out = new byte[outBuffPosn];
        
System.arraycopy(outBuff0out0outBuffPosn);
        return 
out;
    } 
// end decode
    
    /**
     * Decodes data from Base64 notation, automatically detecting
     * gzip-compressed data and decompressing it.
     * 
     * @param s
     *            the string to decode
     * @return the decoded data
     * @since 1.4
     */
    
public static byte[] decode(String s)
    {
        
byte[] bytes;
        try
        {
            
bytes s.getBytes(PREFERRED_ENCODING);
        } 
// end try
        
catch (java.io.UnsupportedEncodingException uee)
        {
            
bytes s.getBytes();
        } 
// end catch
        // </change>
        
        // Decode
        
bytes decode(bytes0bytes.length);
        
        
// Check to see if it's gzip-compressed
        // GZIP Magic Two-Byte Number: 0x8b1f (35615)
        
if (bytes != null && // In case decoding returned null
                
bytes.length >= 2)
        {
            
            
int head = (bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00);
            if (
bytes.length >= && // Don't want to get ArrayIndexOutOfBounds
                                     // exception
                    
java.util.zip.GZIPInputStream.GZIP_MAGIC == head)
            {
                
java.io.ByteArrayInputStream bais null;
                
java.util.zip.GZIPInputStream gzis null;
                
java.io.ByteArrayOutputStream baos null;
                
byte[] buffer = new byte[2048];
                
int length 0;
                
                try
                {
                    
baos = new java.io.ByteArrayOutputStream();
                    
bais = new java.io.ByteArrayInputStream(bytes);
                    
gzis = new java.util.zip.GZIPInputStream(bais);
                    
                    while ((
length gzis.read(buffer)) >= 0)
                    {
                        
baos.write(buffer0length);
                    } 
// end while: reading input
                    
                    // No error? Get new bytes.
                    
bytes baos.toByteArray();
                    
                } 
// end try
                
catch (java.io.IOException e)
                {
                    
// Just return originally-decoded bytes
                
// end catch
                
finally
                
{
                    try
                    {
                        
baos.close();
                    }
                    catch (
Exception e)
                    {
                    }
                    try
                    {
                        
gzis.close();
                    }
                    catch (
Exception e)
                    {
                    }
                    try
                    {
                        
bais.close();
                    }
                    catch (
Exception e)
                    {
                    }
                } 
// end finally
                
            
// end if: gzipped
        
// end if: bytes.length >= 2
        
        
return bytes;
    } 
// end decode
    
    /**
     * Attempts to decode Base64 data and deserialize a Java Object within.
     * Returns <tt>null</tt> if there was an error.
     * 
     * @param encodedObject
     *            The Base64 data to decode
     * @return The decoded and deserialized object
     * @since 1.5
     */
    
public static Object decodeToObject(String encodedObject)
    {
        
// Decode and gunzip if necessary
        
byte[] objBytes decode(encodedObject);
        
        
java.io.ByteArrayInputStream bais null;
        
java.io.ObjectInputStream ois null;
        
Object obj null;
        
        try
        {
            
bais = new java.io.ByteArrayInputStream(objBytes);
            
ois = new java.io.ObjectInputStream(bais);
            
            
obj ois.readObject();
        } 
// end try
        
catch (java.io.IOException e)
        {
            
e.printStackTrace();
            
obj null;
        } 
// end catch
        
catch (java.lang.ClassNotFoundException e)
        {
            
e.printStackTrace();
            
obj null;
        } 
// end catch
        
finally
        
{
            try
            {
                
bais.close();
            }
            catch (
Exception e)
            {
            }
            try
            {
                
ois.close();
            }
            catch (
Exception e)
            {
            }
        } 
// end finally
        
        
return obj;
    } 
// end decodeObject
    
    /*  I N N E R C L A S S I N P U T S T R E A M */

    /**
     * A {@link Base64#InputStream} will read data from another
     * {@link java.io.InputStream}, given in the constructor, and encode/decode
     * to/from Base64 notation on the fly.
     * 
     * @see Base64
     * @see java.io.FilterInputStream
     * @since 1.3
     */
    
public static class InputStream extends java.io.FilterInputStream
    
{
        
// private int options; // Options specified
        
private boolean encode// Encoding or decoding
        
private int position// Current position in the buffer
        
private byte[] buffer// Small buffer holding converted data
        
private int bufferLength// Length of buffer (3 or 4)
        
private int numSigBytes// Number of meaningful bytes in the buffer
        
private int lineLength;
        private 
boolean breakLines// Break lines at less than 80 characters
        
        /**
         * Constructs a {@link Base64#InputStream} in DECODE mode.
         * 
         * @param in
         *            the {@link java.io.InputStream} from which to read data.
         * @since 1.3
         */
        
public InputStream(java.io.InputStream pIn)
        {
            
this(pInDECODE);
        } 
// end constructor
        
        /**
         * Constructs a {@link Base64#InputStream} in either ENCODE or DECODE
         * mode.
         * <p>
         * Valid options:
         * 
         * <pre>
         *   ENCODE or DECODE: Encode or Decode as data is read.
         *   DONT_BREAK_LINES: don't break lines at 76 characters
         *     (only meaningful when encoding)
         *     &lt;i&gt;Note: Technically, this makes your encoding non-compliant.&lt;/i&gt;
         * </pre>
         * <p>
         * Example: <code>new Base64.InputStream( in, Base64.DECODE )</code>
         * 
         * 
         * @param in
         *            the {@link java.io.InputStream} from which to read data.
         * @param options
         *            Specified options
         * @see Base64#ENCODE
         * @see Base64#DECODE
         * @see Base64#DONT_BREAK_LINES
         * @since 2.0
         */
        
public InputStream(java.io.InputStream pInint options)
        {
            
super(pIn);
            
// this.options = options;
            
breakLines = (options DONT_BREAK_LINES) != DONT_BREAK_LINES;
            
encode = (options ENCODE) == ENCODE;
            
bufferLength encode 3;
            
buffer = new byte[bufferLength];
            
position = -1;
            
lineLength 0;
        } 
// end constructor
        
        /**
         * Reads enough of the input stream to convert to/from Base64 and
         * returns the next byte.
         * 
         * @return next byte
         * @since 1.3
         */
        
@Override
        
public int read() throws java.io.IOException
        
{
            
// Do we need to get data?
            
if (position 0)
            {
                if (
encode)
                {
                    
byte[] b3 = new byte[3];
                    
int numBinaryBytes 0;
                    for (
int i 03i++)
                    {
                        try
                        {
                            
int b in.read();
                            
                            
// If end of stream, b is -1.
                            
if (>= 0)
                            {
                                
b3[i] = (byteb;
                                
numBinaryBytes++;
                            } 
// end if: not end of stream
                            
                        
// end try: read
                        
catch (java.io.IOException e)
                        {
                            
// Only a problem if we got no data at all.
                            
if (== 0)
                                throw 
e;
                            
                        } 
// end catch
                    
// end for: each needed input byte
                    
                    
if (numBinaryBytes 0)
                    {
                        
encode3to4(b30numBinaryBytesbuffer0);
                        
position 0;
                        
numSigBytes 4;
                    } 
// end if: got data
                    
else
                    {
                        return -
1;
                    } 
// end else
                
// end if: encoding
                
                // Else decoding
                
else
                {
                    
byte[] b4 = new byte[4];
                    
int i 0;
                    for (
04i++)
                    {
                        
// Read four "meaningful" bytes:
                        
int b 0;
                        do
                        {
                            
in.read();
                        }
                        while (
>= && DECODABET[0x7f] <= WHITE_SPACE_ENC);
                        
                        if (
0)
                            break; 
// Reads a -1 if end of stream
                            
                        
b4[i] = (byteb;
                    } 
// end for: each needed input byte
                    
                    
if (== 4)
                    {
                        
numSigBytes decode4to3(b40buffer0);
                        
position 0;
                    } 
// end if: got four characters
                    
else if (== 0)
                    {
                        return -
1;
                    } 
// end else if: also padded correctly
                    
else
                    {
                        
// Must have broken out from above.
                        
throw new java.io.IOException("Improperly padded Base64 input.");
                    } 
// end
                    
                
// end else: decode
            
// end else: get data
            
            // Got data?
            
if (position >= 0)
            {
                
// End of relevant data?
                
if ( /* !encode && */position >= numSigBytes)
                    return -
1;
                
                if (
encode && breakLines && lineLength >= MAX_LINE_LENGTH)
                {
                    
lineLength 0;
                    return 
'\n';
                } 
// end if
                
lineLength++; // This isn't important when decoding
                // but throwing an extra "if" seems
                // just as wasteful.
                
                
int b buffer[position++];
                
                if (
position >= bufferLength)
                    
position = -1;
                
                return 
0xFF// This is how you "cast" a byte that's
                // intended to be unsigned.
                // end else
            
// end if: position >= 0
            
            // When JDK1.4 is more accepted, use an assertion here.
            
throw new java.io.IOException("Error in Base64 code reading stream.");
            
// end else
        
// end read
        
        /**
         * Calls {@link #read} repeatedly until the end of stream is reached or
         * <var>len</var> bytes are read. Returns number of bytes read into
         * array or -1 if end of stream is encountered.
         * 
         * @param dest
         *            array to hold values
         * @param off
         *            offset for array
         * @param len
         *            max number of bytes to read into array
         * @return bytes read into array or -1 if end of stream is encountered.
         * @since 1.3
         */
        
@Override
        
public int read(byte[] destint offint lenthrows java.io.IOException
        
{
            
int i;
            
int b;
            for (
0leni++)
            {
                
read();
                
                
// if( b < 0 && i == 0 )
                // return -1;
                
                
if (>= 0)
                    
dest[off i] = (byteb;
                else if (
== 0)
                    return -
1;
                else
                    break; 
// Out of 'for' loop
            
// end for: each byte read
            
return i;
        } 
// end read
        
    
// end inner class InputStream
    
    /*  I N N E R C L A S S O U T P U T S T R E A M */

    /**
     * A {@link Base64#OutputStream} will write data to another
     * {@link java.io.OutputStream}, given in the constructor, and encode/decode
     * to/from Base64 notation on the fly.
     * 
     * @see Base64
     * @see java.io.FilterOutputStream
     * @since 1.3
     */
    
public static class OutputStream extends java.io.FilterOutputStream
    
{
        
// private int options;
        
private boolean encode;
        private 
int position;
        private 
byte[] buffer;
        private 
int bufferLength;
        private 
int lineLength;
        private 
boolean breakLines;
        private 
byte[] b4// Scratch used in a few places
        
private boolean suspendEncoding;
        
        
/**
         * Constructs a {@link Base64#OutputStream} in ENCODE mode.
         * 
         * @param out
         *            the {@link java.io.OutputStream} to which data will be
         *            written.
         * @since 1.3
         */
        
public OutputStream(java.io.OutputStream pOut)
        {
            
this(pOutENCODE);
        } 
// end constructor
        
        /**
         * Constructs a {@link Base64#OutputStream} in either ENCODE or DECODE
         * mode.
         * <p>
         * Valid options:
         * 
         * <pre>
         *   ENCODE or DECODE: Encode or Decode as data is read.
         *   DONT_BREAK_LINES: don't break lines at 76 characters
         *     (only meaningful when encoding)
         *     &lt;i&gt;Note: Technically, this makes your encoding non-compliant.&lt;/i&gt;
         * </pre>
         * <p>
         * Example: <code>new Base64.OutputStream( out, Base64.ENCODE )</code>
         * 
         * @param out
         *            the {@link java.io.OutputStream} to which data will be
         *            written.
         * @param options
         *            Specified options.
         * @see Base64#ENCODE
         * @see Base64#DECODE
         * @see Base64#DONT_BREAK_LINES
         * @since 1.3
         */
        
public OutputStream(java.io.OutputStream pOutint options)
        {
            
super(pOut);
            
// this.options = options;
            
breakLines = (options DONT_BREAK_LINES) != DONT_BREAK_LINES;
            
encode = (options ENCODE) == ENCODE;
            
bufferLength encode 4;
            
buffer = new byte[bufferLength];
            
position 0;
            
lineLength 0;
            
suspendEncoding false;
            
b4 = new byte[4];
        } 
// end constructor
        
        /**
         * Writes the byte to the output stream after converting to/from Base64
         * notation. When encoding, bytes are buffered three at a time before
         * the output stream actually gets a write() call. When decoding, bytes
         * are buffered four at a time.
         * 
         * @param theByte
         *            the byte to write
         * @since 1.3
         */
        
@Override
        
public void write(int theBytethrows java.io.IOException
        
{
            
// Encoding suspended?
            
if (suspendEncoding)
            {
                
super.out.write(theByte);
                return;
            } 
// end if: supsended
            
            // Encode?
            
if (encode)
            {
                
buffer[position++] = (bytetheByte;
                if (
position >= bufferLength// Enough to encode.
                
{
                    
out.write(encode3to4(b4bufferbufferLength));
                    
                    
lineLength += 4;
                    if (
breakLines && lineLength >= MAX_LINE_LENGTH)
                    {
                        
out.write(NEW_LINE);
                        
lineLength 0;
                    } 
// end if: end of line
                    
                    
position 0;
                } 
// end if: enough to output
            
// end if: encoding
            
            // Else, Decoding
            
else
            {
                
// Meaningful Base64 character?
                
if (DECODABET[theByte 0x7f] > WHITE_SPACE_ENC)
                {
                    
buffer[position++] = (bytetheByte;
                    if (
position >= bufferLength// Enough to output.
                    
{
                        
int len Base64.decode4to3(buffer0b40);
                        
out.write(b40len);
                        
// out.write( Base64.decode4to3( buffer ) );
                        
position 0;
                    } 
// end if: enough to output
                
// end if: meaningful base64 character
                
else if (DECODABET[theByte 0x7f] != WHITE_SPACE_ENC)
                {
                    throw new 
java.io.IOException("Invalid character in Base64 data.");
                } 
// end else: not white space either
            
// end else: decoding
        
// end write
        
        /**
         * Calls {@link #write} repeatedly until <var>len</var> bytes are
         * written.
         * 
         * @param theBytes
         *            array from which to read bytes
         * @param off
         *            offset for array
         * @param len
         *            max number of bytes to read into array
         * @since 1.3
         */
        
@Override
        
public void write(byte[] theBytesint offint lenthrows java.io.IOException
        
{
            
// Encoding suspended?
            
if (suspendEncoding)
            {
                
super.out.write(theBytesofflen);
                return;
            } 
// end if: supsended
            
            
for (int i 0leni++)
            {
                
write(theBytes[off i]);
            } 
// end for: each byte written
            
        
// end write
        
        /**
         * Method added by PHIL. [Thanks, PHIL. -Rob] This pads the buffer
         * without closing the stream.
         */
        
public void flushBase64() throws java.io.IOException
        
{
            if (
position 0)
            {
                if (
encode)
                {
                    
out.write(encode3to4(b4bufferposition));
                    
position 0;
                } 
// end if: encoding
                
else
                {
                    throw new 
java.io.IOException("Base64 input not properly padded.");
                } 
// end else: decoding
            
// end if: buffer partially full
            
        
// end flush
        
        /**
         * Flushes and closes (I think, in the superclass) the stream.
         * 
         * @since 1.3
         */
        
@Override
        
public void close() throws java.io.IOException
        
{
            
// 1. Ensure that pending characters are written
            
flushBase64();
            
            
// 2. Actually close the stream
            // Base class both flushes and closes.
            
super.close();
            
            
buffer null;
            
out null;
        } 
// end close
        
        /**
         * Suspends encoding of the stream. May be helpful if you need to embed
         * a piece of base640-encoded data in a stream.
         * 
         * @since 1.5.1
         */
        
public void suspendEncoding() throws java.io.IOException
        
{
            
flushBase64();
            
suspendEncoding true;
        } 
// end suspendEncoding
        
        /**
         * Resumes encoding of the stream. May be helpful if you need to embed a
         * piece of base640-encoded data in a stream.
         * 
         * @since 1.5.1
         */
        
public void resumeEncoding()
        {
            
suspendEncoding false;
        } 
// end resumeEncoding
        
    
// end inner class OutputStream
    
// end class Base64 
[/SPOILER]
кажется как то тут можно добавить русс язык....

Добавлено через 8754 часов 1 минуту
все без вас я разобрался...

Последний раз редактировалось krisadr; 25.01.2010 в 23:14. Причина: Добавлено сообщение
krisadr вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 16:46. Часовой пояс GMT +3.

Вверх