elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Comparativa y análisis mejores sistemas de videollamadas


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Traducir este código de C# a Java
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Traducir este código de C# a Java  (Leído 1,184 veces)
TickTack

Desconectado Desconectado

Mensajes: 260


Ver Perfil
Traducir este código de C# a Java
« en: 22 Abril 2020, 14:51 »

Hola a todos,

¿alguien me puede ayudar, por favor, a traducir este pequeño código de C# a Java?

Código:
public static byte[] Decompress(byte[] data)
        {
            try
            {
                byte[] r = null;

                using (MemoryStream ms = new MemoryStream(data))
                using (Stream s = new InflaterInputStream(ms))
                {
                    List<byte> list = new List<byte>();
                    int count = 0;
                    byte[] b = new byte[8192];

                    while ((count = s.Read(b, 0, 8192)) > 0)
                        list.AddRange(b.Take(count));

                    r = list.ToArray();
                    list.Clear();
                    list = null;
                }

                return r;
            }
            catch { }

            return new byte[] { };
        }
En especial, no se cómo programar estás dos líneas con Java:
Código:
using (MemoryStream ms = new MemoryStream(data))
using (Stream s = new InflaterInputStream(ms))
Ya que en Java reemplazo el using por el try. Pero no funciona si lo hago dos veces en este caso.


Gracias y saludos


En línea

rub'n


Desconectado Desconectado

Mensajes: 1.086


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Traducir este código de C# a Java
« Respuesta #1 en: 22 Abril 2020, 16:00 »

Hola a todos,

¿alguien me puede ayudar, por favor, a traducir este pequeño código de C# a Java?

Código:
public static byte[] Decompress(byte[] data)
        {
            try
            {
                byte[] r = null;

                using (MemoryStream ms = new MemoryStream(data))
                using (Stream s = new InflaterInputStream(ms))
                {
                    List<byte> list = new List<byte>();
                    int count = 0;
                    byte[] b = new byte[8192];

                    while ((count = s.Read(b, 0, 8192)) > 0)
                        list.AddRange(b.Take(count));

                    r = list.ToArray();
                    list.Clear();
                    list = null;
                }

                return r;
            }
            catch { }

            return new byte[] { };
        }
En especial, no se cómo programar estás dos líneas con Java:
Código:
using (MemoryStream ms = new MemoryStream(data))
using (Stream s = new InflaterInputStream(ms))
Ya que en Java reemplazo el using por el try. Pero no funciona si lo hago dos veces en este caso.


Código:
using (MemoryStream ms = new MemoryStream(data))
using (Stream s = new InflaterInputStream(ms))

Gracias y saludos

Ejemplo

Código:
using (MemoryStream ms = new MemoryStream(data)) / ByteArrayInputStream/ByteArrayOutPutStream
using (Stream s = new InflaterInputStream(ms))  / GZIPInputStream

Código
  1. public static byte[] decompress(final byte[] data) throws IOException {
  2.            try(final ByteArrayInputStream bis = new ByteArrayInputStream(data);
  3.                final GZIPInputStream gzip = new GZIPInputStream(bis);
  4.                final ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
  5.  
  6.                final byte[] buffer = new byte[8192];
  7.                int dataRead = 0;
  8.  
  9.                while((dataRead = gzip.read(buffer)) != -1) {
  10.                   baos.write(buffer,0,dataRead);
  11.                }
  12.  
  13.                return baos.toByteArray();
  14.            } catch(IOException ex) {
  15.                throw new RuntimeException();
  16.            }
  17. }

Con versiones superiores a la jdk 8, aqui use open jdk 11

Código
  1. public static byte[] descompres(final byte[] data) throws IOException {
  2.        try(final var bis = new ByteArrayInputStream(data);
  3.            final var gzip = new GZIPInputStream(bis);
  4.            final var baos = new ByteArrayOutputStream()) {
  5.  
  6.            gzip.transferTo(baos);
  7.            return baos.toByteArray();
  8.  
  9.        } catch(IOException ex) {
  10.            throw new RuntimeException();
  11.        }
  12. }


« Última modificación: 5 Junio 2020, 10:16 por rub'n » En línea

KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen King.
TickTack

Desconectado Desconectado

Mensajes: 260


Ver Perfil
Re: Traducir este código de C# a Java
« Respuesta #2 en: 22 Abril 2020, 19:02 »

Hola rub'n,

¡¡wow!!

El único detalle que se me olvidó comentar fue que la clase InflaterInputStream que mostré en el pequeño código se refiere a esta clase: https://github.com/icsharpcode/SharpZipLib/blob/master/src/ICSharpCode.SharpZipLib/Zip/Compression/Streams/InflaterInputStream.cs

Como no necesito todo el contenido, no quería traducir todo. Pero solamente pude traducir cómo pasar parámetros de un constructor a otro. Nada más :( :

Código:
public class InflaterInputStream {
public InflaterInputStream(Stream baseInputStream)
{
this(baseInputStream, new Inflater(), 4096);
}

/// <summary>
/// Create an InflaterInputStream with the specified decompressor
/// and a default buffer size of 4KB.
/// </summary>
/// <param name = "baseInputStream">
/// The source of input data
/// </param>
/// <param name = "inf">
/// The decompressor used to decompress data read from baseInputStream
/// </param>


/// <summary>
/// Create an InflaterInputStream with the specified decompressor
/// and the specified buffer size.
/// </summary>
/// <param name = "baseInputStream">
/// The InputStream to read bytes from
/// </param>
/// <param name = "inflater">
/// The decompressor to use
/// </param>
/// <param name = "bufferSize">
/// Size of the buffer to use
/// </param>
public InflaterInputStream(Stream baseInputStream, Inflater inflater, int bufferSize)
{
if (baseInputStream == null)
{
throw new ArgumentNullException(nameof(baseInputStream));
}

if (inflater == null)
{
throw new ArgumentNullException(nameof(inflater));
}

if (bufferSize <= 0)
{
throw new ArgumentOutOfRangeException(nameof(bufferSize));
}

this.baseInputStream = baseInputStream;
this.inf = inflater;

inputBuffer = new InflaterInputBuffer(baseInputStream, bufferSize);
}
}

En especial no se cómo crear un objeto de Stream como en el código.

Se tendría que modificar el código que tú compartiste si se tiene en cuenta que InflaterInputStream no es lo que quizás tú pensaste que era?

Aunque quizás no se tenga que cambiar tu código --> https://icsharpcode.github.io/SharpZipLib/help/api/ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream.html
En ese link sale el autor original de Java...


Muchísimas gracias y muchos saludos
« Última modificación: 22 Abril 2020, 19:25 por TickTack » En línea

rub'n


Desconectado Desconectado

Mensajes: 1.086


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Traducir este código de C# a Java
« Respuesta #3 en: 22 Abril 2020, 20:22 »

Hola rub'n,

¡¡wow!!

El único detalle que se me olvidó comentar fue que la clase InflaterInputStream que mostré en el pequeño código se refiere a esta clase: https://github.com/icsharpcode/SharpZipLib/blob/master/src/ICSharpCode.SharpZipLib/Zip/Compression/Streams/InflaterInputStream.cs

Como no necesito todo el contenido, no quería traducir todo. Pero solamente pude traducir cómo pasar parámetros de un constructor a otro. Nada más :( :

Código:
public class InflaterInputStream {
public InflaterInputStream(Stream baseInputStream)
{
this(baseInputStream, new Inflater(), 4096);
}

/// <summary>
/// Create an InflaterInputStream with the specified decompressor
/// and a default buffer size of 4KB.
/// </summary>
/// <param name = "baseInputStream">
/// The source of input data
/// </param>
/// <param name = "inf">
/// The decompressor used to decompress data read from baseInputStream
/// </param>


/// <summary>
/// Create an InflaterInputStream with the specified decompressor
/// and the specified buffer size.
/// </summary>
/// <param name = "baseInputStream">
/// The InputStream to read bytes from
/// </param>
/// <param name = "inflater">
/// The decompressor to use
/// </param>
/// <param name = "bufferSize">
/// Size of the buffer to use
/// </param>
public InflaterInputStream(Stream baseInputStream, Inflater inflater, int bufferSize)
{
if (baseInputStream == null)
{
throw new ArgumentNullException(nameof(baseInputStream));
}

if (inflater == null)
{
throw new ArgumentNullException(nameof(inflater));
}

if (bufferSize <= 0)
{
throw new ArgumentOutOfRangeException(nameof(bufferSize));
}

this.baseInputStream = baseInputStream;
this.inf = inflater;

inputBuffer = new InflaterInputBuffer(baseInputStream, bufferSize);
}
}

En especial no se cómo crear un objeto de Stream como en el código.

Se tendría que modificar el código que tú compartiste si se tiene en cuenta que InflaterInputStream no es lo que quizás tú pensaste que era?

Aunque quizás no se tenga que cambiar tu código --> https://icsharpcode.github.io/SharpZipLib/help/api/ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream.html
En ese link sale el autor original de Java...


Muchísimas gracias y muchos saludos

:huh: que es lo que quieres hacer? descomprimir un archivo, analiza bien cual es tu meta con esto LMAO.
En línea

KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen King.
TickTack

Desconectado Desconectado

Mensajes: 260


Ver Perfil
Re: Traducir este código de C# a Java
« Respuesta #4 en: 22 Abril 2020, 21:36 »

Hola rub'n,

muchas gracias por preguntar. Lo que en realidad quiero hacer es descifrar Hashlinks con Java (traduciendo un código de C# con el cual ya se puede hacer eso).

Y en este link empieza la historia: https://github.com/AresChat/cb0t/blob/37b45f81a1b61355423475f1f9cb519de74e7b52/cb0t/Misc/Hashlink.cs

Empieza, en especial en este código (en el comentario te muestro hasta donde traduci):
Código:
public static DecryptedHashlink DecodeHashlink(String hashlink)
        {
            DecryptedHashlink room = new DecryptedHashlink();

            try
            {
                if (hashlink.ToUpper().StartsWith("CHATROOM:")) // not encrypted
                {
                    hashlink = hashlink.Substring(9);
                    int split = hashlink.IndexOf(":");
                    room.IP = IPAddress.Parse(hashlink.Substring(0, split));
                    hashlink = hashlink.Substring(split + 1);
                    split = hashlink.IndexOf("|");
                    room.Port = ushort.Parse(hashlink.Substring(0, split));
                    room.Name = hashlink.Substring(split + 1);
                    return room;
                }
                else // encrypted
                {
                    byte[] buf = Convert.FromBase64String(hashlink);
                    buf = d67(buf, 28435); //hasta ahí pude traducir sin problemas
                    buf = Zip.Decompress(buf);

                    HashlinkReader reader = new HashlinkReader(buf);
                    reader.SkipBytes(32);
                    room.IP = reader;
                    room.Port = reader;
                    reader.SkipBytes(4);
                    room.Name = reader;

                    return room;
                }
            }
            catch // badly formed hashlink
            {
                return null;
            }
        }

Y ahí está el método Zip.Decompress(): https://github.com/AresChat/cb0t/blob/37b45f81a1b61355423475f1f9cb519de74e7b52/cb0t/Misc/Zip.cs

El método Zip.Decompress() es el del que trata este post.


Muchísimas gracias y muchos saludos
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.086


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Traducir este código de C# a Java
« Respuesta #5 en: 22 Abril 2020, 21:47 »

Hola rub'n,

muchas gracias por preguntar. Lo que en realidad quiero hacer es descifrar Hashlinks con Java (traduciendo un código de C# con el cual ya se puede hacer eso).

Y en este link empieza la historia: https://github.com/AresChat/cb0t/blob/37b45f81a1b61355423475f1f9cb519de74e7b52/cb0t/Misc/Hashlink.cs

Empieza, en especial en este código (en el comentario te muestro hasta donde traduci):
Código:
public static DecryptedHashlink DecodeHashlink(String hashlink)
        {
            DecryptedHashlink room = new DecryptedHashlink();

            try
            {
                if (hashlink.ToUpper().StartsWith("CHATROOM:")) // not encrypted
                {
                    hashlink = hashlink.Substring(9);
                    int split = hashlink.IndexOf(":");
                    room.IP = IPAddress.Parse(hashlink.Substring(0, split));
                    hashlink = hashlink.Substring(split + 1);
                    split = hashlink.IndexOf("|");
                    room.Port = ushort.Parse(hashlink.Substring(0, split));
                    room.Name = hashlink.Substring(split + 1);
                    return room;
                }
                else // encrypted
                {
                    byte[] buf = Convert.FromBase64String(hashlink);
                    buf = d67(buf, 28435); //hasta ahí pude traducir sin problemas
                    buf = Zip.Decompress(buf);

                    HashlinkReader reader = new HashlinkReader(buf);
                    reader.SkipBytes(32);
                    room.IP = reader;
                    room.Port = reader;
                    reader.SkipBytes(4);
                    room.Name = reader;

                    return room;
                }
            }
            catch // badly formed hashlink
            {
                return null;
            }
        }

Y ahí está el método Zip.Decompress(): https://github.com/AresChat/cb0t/blob/37b45f81a1b61355423475f1f9cb519de74e7b52/cb0t/Misc/Zip.cs

El método Zip.Decompress() es el del que trata este post.


Muchísimas gracias y muchos saludos

Pasa esta clase a Java LMAO

https://github.com/AresChat/cb0t/blob/37b45f81a1b61355423475f1f9cb519de74e7b52/cb0t/Misc/HashlinkReader.cs

Ya esta DecryptedHashlink es muy simple.

Código
  1. class DecryptedHashlink
  2.    {
  3.        public String Name { get; set; }
  4.        public IPAddress IP { get; set; }
  5.        public ushort Port { get; set; }
  6.    }
En línea

KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen King.
TickTack

Desconectado Desconectado

Mensajes: 260


Ver Perfil
Re: Traducir este código de C# a Java
« Respuesta #6 en: 22 Abril 2020, 22:19 »

Hola rub'n,

y qué hay del método Zip.Decompress? Lo dejo como tú me lo compartiste? En caso de ser así ya me larga error en esta línea:

Código:
try(final ByteArrayInputStream bis = new ByteArrayInputStream(data);
El error es: Missing ')'.

Cómo podría solucionarlo?


Muchísimas gracias por tu ayuda y saludos
En línea

rub'n


Desconectado Desconectado

Mensajes: 1.086


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Traducir este código de C# a Java
« Respuesta #7 en: 22 Abril 2020, 22:58 »

Hola rub'n,

y qué hay del método Zip.Decompress? Lo dejo como tú me lo compartiste? En caso de ser así ya me larga error en esta línea:

Código:
try(final ByteArrayInputStream bis = new ByteArrayInputStream(data);
El error es: Missing ')'.

Cómo podría solucionarlo?


Muchísimas gracias por tu ayuda y saludos

Que estarás haciendo? esta con código C# aún o que? yo probé eso antes de ir por ahí pegando y copiando, extraño que pase eso.

Escribe tal cual lo que te puse, es try-with resources, y te indica tal cual que te falta un parentesis.

try(final ByteArrayInputStream bis = new ByteArrayInputStream(data);  el código no termina ahí, falta mas, prueba como te lo puse.

Tip, ten paciencia.
« Última modificación: 26 Abril 2020, 03:56 por rub'n » En línea

KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen King.
@XSStringManolo
Colaborador
***
Desconectado Desconectado

Mensajes: 2.093


Turn off the red ligth


Ver Perfil WWW
Re: Traducir este código de C# a Java
« Respuesta #8 en: 22 Abril 2020, 23:24 »

Hola rub'n,

y qué hay del método Zip.Decompress? Lo dejo como tú me lo compartiste? En caso de ser así ya me larga error en esta línea:

Código:
try(final ByteArrayInputStream bis = new ByteArrayInputStream(data);
El error es: Missing ')'.

Cómo podría solucionarlo?


Muchísimas gracias por tu ayuda y saludos
Cambiaste el { por un (. Asique te tira el error, falta un paréntesis. Supongo que si le pones el paréntesis que falta te dira que try está undefined xD.
Mejor copia y pega, en vez de copiar a mano.
En línea

TickTack

Desconectado Desconectado

Mensajes: 260


Ver Perfil
Re: Traducir este código de C# a Java
« Respuesta #9 en: 5 Junio 2020, 21:44 »

Hola rub'n y @XSStringManolo,

muchísimas gracias por su ayuda. Yo solamente lo copie y lo pegue pero me larga error :(

Puede ser que tenga que ver con el IDE? Yo estoy usando AIDE. Quizás si ustedes lo prueban ahi puedan ver que también les larga errores...


Muchísimas gracias y saludos
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
en que falla este codigo java
Java
JulCesa 3 1,842 Último mensaje 20 Noviembre 2011, 05:29
por RyogiShiki
convirtiendo este codigo PHP en codigo Java
Java
alejogzn 5 1,224 Último mensaje 12 Abril 2015, 02:50
por DarK_FirefoX
Pasar este código de VB a Java
Programación General
Baal_30 1 641 Último mensaje 17 Marzo 2016, 16:22
por ivancea96
Traducir este código a vb.net
.NET (C#, VB.NET, ASP)
Borito30 3 1,793 Último mensaje 5 Junio 2017, 20:13
por Eleкtro
Pasar este código Java a C
Programación C/C++
Deivid_Math 3 417 Último mensaje 1 Mayo 2020, 22:21
por Deivid_Math
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines