Autor
|
Tema: Traducir este código de C# a Java (Leído 7,494 veces)
|
TickTack
Desconectado
Mensajes: 434
CipherX
|
Hola a todos, ¿alguien me puede ayudar, por favor, a traducir este pequeño código de C# a Java? 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: 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
Mensajes: 1.218
(e -> λ("live now")); tatuar -> λ("α");
|
Hola a todos, ¿alguien me puede ayudar, por favor, a traducir este pequeño código de C# a Java? 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: 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. using (MemoryStream ms = new MemoryStream(data)) using (Stream s = new InflaterInputStream(ms))
Gracias y saludos Ejemplo using (MemoryStream ms = new MemoryStream(data)) / ByteArrayInputStream/ByteArrayOutPutStream using (Stream s = new InflaterInputStream(ms)) / GZIPInputStream
public static byte[] decompress(final byte[] data) { final byte[] buffer = new byte[8192]; int dataRead = 0; while((dataRead = gzip.read(buffer)) != -1) { baos.write(buffer,0,dataRead); } return baos.toByteArray(); } }
Con versiones superiores a la jdk 8, aqui use open jdk 11public static byte[] descompres(final byte[] data) { gzip.transferTo(baos); return baos.toByteArray(); //Mejorar excepcion } }
|
|
« Última modificación: 19 Noviembre 2020, 23:58 pm por rub'n »
|
En línea
|
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
Mensajes: 434
CipherX
|
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.csComo 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 : 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.htmlEn ese link sale el autor original de Java... Muchísimas gracias y muchos saludos
|
|
« Última modificación: 22 Abril 2020, 19:25 pm por TickTack »
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.218
(e -> λ("live now")); tatuar -> λ("α");
|
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.csComo 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 : 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.htmlEn ese link sale el autor original de Java... Muchísimas gracias y muchos saludos que es lo que quieres hacer? descomprimir un archivo, analiza bien cual es tu meta con esto LMAO.
|
|
|
En línea
|
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
Mensajes: 434
CipherX
|
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.csEmpieza, en especial en este código (en el comentario te muestro hasta donde traduci): 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.csEl método Zip.Decompress() es el del que trata este post. Muchísimas gracias y muchos saludos
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.218
(e -> λ("live now")); tatuar -> λ("α");
|
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.csEmpieza, en especial en este código (en el comentario te muestro hasta donde traduci): 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.csEl 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.csYa esta DecryptedHashlink es muy simple. class DecryptedHashlink { public String Name { get; set; } public IPAddress IP { get; set; } public ushort Port { get; set; } }
|
|
|
En línea
|
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
Mensajes: 434
CipherX
|
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: 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
Mensajes: 1.218
(e -> λ("live now")); tatuar -> λ("α");
|
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: 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 am por rub'n »
|
En línea
|
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
Hacker/Programador
Colaborador
Desconectado
Mensajes: 2.399
Turn off the red ligth
|
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: 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
|
Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖
|
|
|
TickTack
Desconectado
Mensajes: 434
CipherX
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
en que falla este codigo java
Java
|
JulCesa
|
3
|
3,027
|
20 Noviembre 2011, 05:29 am
por RyogiShiki
|
|
|
convirtiendo este codigo PHP en codigo Java
Java
|
alejogzn
|
5
|
2,872
|
12 Abril 2015, 02:50 am
por DarK_FirefoX
|
|
|
Pasar este código de VB a Java
Programación General
|
Baal_30
|
1
|
2,225
|
17 Marzo 2016, 16:22 pm
por ivancea96
|
|
|
Traducir este código a vb.net
.NET (C#, VB.NET, ASP)
|
Borito30
|
3
|
4,034
|
5 Junio 2017, 20:13 pm
por Eleкtro
|
|
|
Pasar este código Java a C
Programación C/C++
|
Deivid_Math
|
3
|
5,147
|
1 Mayo 2020, 22:21 pm
por Deivid_Math
|
|