[ C# / Java ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by procedure, 2 Nov 2008.

  1. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Вместо ' используй ".
     
    1 person likes this.
  2. notkeo

    notkeo New Member

    Joined:
    24 Dec 2011
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    Еще бы имена классов писал с большой буквы , было бы вообще отлично.
     
    #1502 notkeo, 23 Jan 2013
    Last edited: 23 Jan 2013
  3. Lightman

    Lightman New Member

    Joined:
    31 Jan 2013
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    посоветуйте пожалуйста самоучитель по Java.
    гугл перерыл
     
    1 person likes this.
  4. FeraS

    FeraS Elder - Старейшина

    Joined:
    19 Jan 2007
    Messages:
    555
    Likes Received:
    420
    Reputations:
    76
    Lightman
    http://nnm-club.ru/forum/viewtopic.php?t=539939
     
  5. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    Составляю multipart/form-data запрос с отправкой изображения.
    Подскажите, как верно считать само изображение.

    Сейчас использую такую конструкцию
    Code:
    string sFileContent = "";
    
                    Stream fStream = null;
                    fStream = File.OpenRead(photo_name);
                    int nread;
                    try
                    {
                        byte[] buffer = new byte[4096];
                        while ((nread = fStream.Read(buffer, 0, 4096)) != 0)
                            sFileContent += Encoding.Default.GetString(buffer);
                        fStream.Close();
                    }
    
     
  6. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Это имеешь ввиду?
     
  7. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    Если чесно, плохо представляю, как подладить этот кусок кода под мой код. Там в base64 конвертится бинарник картинки, а мне без этого нужно.. Сори за тупизм, учусь еще только.

    Вот мой код
    Code:
                    string sFileContent = "";
                    Stream fStream = null;
                    fStream = File.OpenRead(photo_name);
                    int nread;
                    try
                    {
                        byte[] buffer = new byte[4096];
                        while ((nread = fStream.Read(buffer, 0, 4096)) != 0)
                            sFileContent += Encoding.UTF8.GetString(buffer);
                        fStream.Close();
                    }
                    catch (Exception exc)
                    {
                        Console.WriteLine(exc.Message);
                    }
                    //rwriteln(sFileContent);
    
    
                    using (var requestStream = request.GetRequestStream())
                    using (var writer = new StreamWriter(requestStream))
                    {
                        //if (g == 0)
                        //{
                            writer.WriteLine("--" + boundary);
                            writer.WriteLine(string.Format("Content-Disposition: form-data; name=\"file\"; filename=\"{0}\"", photo_name));
                            writer.WriteLine(string.Format("Content-Type: image/jpeg"));
                            writer.WriteLine();
                            writer.WriteLine(sFileContent);
                            //g++;
                        //}
    
                        foreach (var item in data)
                        {
                            writer.WriteLine("--" + boundary);
                            writer.WriteLine(string.Format("Content-Disposition: form-data; name=\"{0}\"", item.Key));
                            writer.WriteLine();
                            writer.WriteLine(item.Value);
                        }
                        writer.WriteLine("--" + boundary + "--");
                    }
    
                    using (var response = request.GetResponse())
                    using (var responseStream = response.GetResponseStream())
                    using (var reader = new StreamReader(responseStream))
                    {
                        html = reader.ReadToEnd();
                    }
    
    Вот в такой кодировке должна получиться картинка в оригинале
    [​IMG]

    а вот такое получается у меня
    [​IMG]
     
  8. seosimf

    seosimf Member

    Joined:
    3 Mar 2011
    Messages:
    271
    Likes Received:
    44
    Reputations:
    6
    Ну ты приводишь двоичные данные к UTF-8 строке, чему собственно удивляться? Делай все в byte[], как и должно быть, без всяких привидений к строке.
     
  9. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    по моему коду можешь пример составить? а то я не очень представляю как это будет.. учусь еще..
     
  10. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Code:
    sFileContent += Encoding.UTF8.GetString(buffer);
    
    Code:
    sFileContent += Encoding.ASCII.GetString(buffer);
    
     
  11. seosimf

    seosimf Member

    Joined:
    3 Mar 2011
    Messages:
    271
    Likes Received:
    44
    Reputations:
    6
  12. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    На глаз, у обоих вариантов кодировки отличаются от оригинала, да и запрос не проходит.


    без конверсии в поток выводятся "байты" = набор цифр
     
    #1512 [SMD], 14 Feb 2013
    Last edited: 14 Feb 2013
  13. khvdaiver

    khvdaiver New Member

    Joined:
    29 Oct 2012
    Messages:
    79
    Likes Received:
    2
    Reputations:
    0
    интересно, а как это байтовые приблуды бросаются по хттп? ничего, что обязательно надо конвертить в бэйс64, чтобы левых символов не было?
     
  14. [SMD]

    [SMD] Member

    Joined:
    17 Nov 2010
    Messages:
    27
    Likes Received:
    5
    Reputations:
    0
    Но ведь в оригинальном запросе не было ничего в бейс64.
    Щас попробую так сделать.
     
  15. seosimf

    seosimf Member

    Joined:
    3 Mar 2011
    Messages:
    271
    Likes Received:
    44
    Reputations:
    6
    Ты сильно, сильно заблуждаешься, никакое преобразования в base64 не является обязательным. Главное что бы bondary был уникальным. И все в конечно итоге идет в "байтовых приблудах".
    [SMD] - пиши все в массиве байт. Сначала переводи текст в System.Text.Encoding.UTF8.GetBytes(можешь делать Url кодирования все что выше 127 и не печатные символы, кроме конечно CRLF) в массив. Затем используй File.ReadAllBytes для того что бы считать содержимое изображения. Можешь использовать MemoryStream для объединения всего в один массив байт.
     
    #1515 seosimf, 19 Feb 2013
    Last edited: 19 Feb 2013
  16. wkololo4ever

    wkololo4ever New Member

    Joined:
    14 Jun 2011
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    Объяснит кто, в чем проблема?
    В консольном режиме нажимаю ctr+c, получаю
    [​IMG]
    Стоит Microsoft Visual C# 2010 Express
    Код
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    class Program
    {
        static void Main(string[] args)
        {
            Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
            Console.ReadLine();
            Console.ReadLine();
        }
        static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
        {
            Console.WriteLine("\a\a\a\a\a\a\a");
        }
    } 
    
     
  17. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    wkololo4ever, возможно, ctrl+c закрывает консоль быстрее чем запустится обработчик события и он успеет пикнуть... Попробуй в Console_CancelKeyPress засунуть e.Cancel = true;
     
    #1517 DeepBlue7, 27 Feb 2013
    Last edited: 27 Feb 2013
  18. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Вопрос по формам, потокобезопасные вызовы.

    Делаю так:

    Form1.cs:
    Code:
    public static Label staticLabel;
    public delegate void changeControlVisibility(Control ctrl, bool state);
    
    
    
    public static void iSetControlVisibility(Control ctrl, bool state)
    {
    	if(state) ctrl.Visible = true;
    	else ctrl.Visible = false;
    }
    
    private void Form1_Load(object sender, EventArgs e)
    {
      staticLabel = someLabel;
       
    }
    

    Другая форма...
    Code:
    
    if(Form1.staticLabel.InvokeRequired)
    {
    	Form1.changeControlVisibility deleg = new Form1.changeControlVisibility(Form1.iSetControlVisibility);
    	//вот тут... действительно ли надо Invo-кать вот так ? выглядит немного абсурдно..
    
    	Form1.staticLabel.Invoke(deleg, new object[] { Form1.staticLabel, false }); 
    }
    
    И вообще, такой подход для обеспечения потокобезопасности в формах адекватен ?
     
  19. seosimf

    seosimf Member

    Joined:
    3 Mar 2011
    Messages:
    271
    Likes Received:
    44
    Reputations:
    6
    DeepBlue7 правильней будет реализовать это через события. Создай на другой форме события, а в Form1 подписывайся на него и через аргументы события смотри что да как.
     
  20. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Дело в том, что изменения в Control-ах производятся из другого класса.
     
Loading...
Similar Threads - Java начинающим задаем
  1. b3
    Replies:
    4
    Views:
    3,003